如何在 SwiftUI 中开发定制 MapKit 功能

在这里插入图片描述

文章目录

    • 介绍
    • 地图样式
      • imagery-map
    • 地图交互
    • 地图控件
    • 总结

介绍

在上一篇文章中,我们探讨了 SwiftUI 中新的 MapKit API 的基础知识。现在,让我们深入 MapKit API 的定制点,以便根据我们的需求定制地图呈现。

地图样式

新的 MapKit API 引入了 mapStyle 视图修饰符,使我们能够自定义地图上呈现的数据样式。

struct ContentView: View {var body: some View {Map {// ...}.mapStyle(.imagery(elevation: .realistic))}
}

在上面的示例中,我们使用了 mapStyle 视图修饰符,并使用了 imagery 样式和逼真的高程。imagery 样式的高程参数的另一个选项是 flat。

imagery-map

SwiftUI 为我们提供了一套预定义且可配置的地图样式。在前面的示例中,我们使用了一个称为 imagery 的样式。默认情况下,SwiftUI 框架使用标准样式。标准样式允许我们配置地图的高程、要包括或排除的兴趣点,以及是否需要显示交通信息。

struct ContentView: View {var body: some View {Map {// ...}.mapStyle(.standard(elevation: .flat,pointsOfInterest: .excluding([.store]),showsTraffic: false))}
}

另一个选项是混合样式,允许在地图上显示影像、道路和道路名称。混合样式还配置了高程、交通和兴趣点。

struct ContentView: View {var body: some View {Map {// ...}.mapStyle(.hybrid(elevation: .flat,pointsOfInterest: .including([.airport]),showsTraffic: true))}
}

地图交互

MapKit 支持与地图的不同类型交互,包括缩放、平移、倾斜和旋转地图上的内容。默认情况下,SwiftUI 激活所有可用手势,但你可以轻松将可用交互限制为首选交互的列表。

struct ContentView: View {var body: some View {Map(interactionModes: [.pan, .pitch]) {// ...}}
}

地图控件

每当将 MapKit 与 SwiftUI 一起导入时,你将获得可用作地图控件的特定 SwiftUI 视图。这些视图包括 MapScaleViewMapCompassMapPitchToggleMapUserLocationButtonMapZoomStepper 视图。

struct ContentView: View {var body: some View {Map {// ...}.mapControls {MapScaleView()MapCompass()}}
}

你可以将这些视图与 mapControls 视图修饰符一起使用,为在 SwiftUI 视图层次结构中共享相同环境的任何地图实例指定控件。当你将 MapScaleViewMapCompass 视图放在 mapControls 视图修饰符内时,SwiftUI 会处理控件的放置,具体取决于运行应用的平台。

这些地图控件是简单的 SwiftUI 视图,这意味着你可以在 mapControls 视图修饰符之外的任何位置使用它们。在这种情况下,要将地图控件绑定到特定的地图实例,你应该使用 mapScope 视图修饰符。

struct MapScopeExample: View {@Namespace private var favoritesMapvar body: some View {VStack {Map(scope: favoritesMap) {// 收藏的标记}HStack {MapScaleView(scope: favoritesMap)MapCompass(scope: favoritesMap)}}.mapScope(favoritesMap)}
}

如上例所示,我们使用 Namespace 属性包装器生成一个地图标识符,将控件绑定到地图实例。当你需要更改自动可见性配置为始终可见或隐藏时,还可以使用 mapControlVisibility 视图修饰符。

struct MapScopeExample: View {@Namespace private var favoritesMapvar body: some View {VStack {Map(scope: favoritesMap) {// 收藏的标记}HStack {MapScaleView(scope: favoritesMap)MapCompass(scope: favoritesMap).mapControlVisibility(.hidden)}}.mapScope(favoritesMap)}
}

总结

本文介绍了 SwiftUI 中 MapKit API 的定制功能。首先,通过 mapStyle 视图修饰符,我们学习了如何定制地图的呈现样式,包括 imagery 样式的高程设置。其次,我们了解了预定义和可配置的地图样式,例如 standard 样式允许配置地图的高程、感兴趣点和是否显示交通信息,而 hybrid 样式则允许同时显示影像、道路和道路名称。

我们深入了解了 SwiftUI 中 MapKit 的强大功能,包括定制地图样式、交互方式和控件,为开发者提供了更多灵活性和可定制性的选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/869174.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LabVIEW开发阀门自动校准装置

1. 装置概述与目标 在工业和实验室环境中,阀门的准确性和稳定性对于流体控制和实验数据的可靠性非常重要。LabVIEW可以作为开发阀门自动校准装置的理想工具,提供高度可定制化的解决方案。 2. 硬件与设备选择 型号选择:为了实现阀门自动校准…

这8款宝藏软件,才是安卓手机必装App!

​AI视频生成:小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/ 1.我的日记——My Diary My Diary 是一款带锁的免费安卓日记工具。 它可用于记录每日日记、秘密想法、旅程、心情追踪或任何私人时刻。 你可…

☺初识c++(语法篇)☺

目录 一命名空间(namespace): 二cout与cin简述: 三缺省参数: 四函数重载: 五引用: 六内联函数: 七c中的nullptr简述: 一命名空间(namespace)&#xff1…

源码编译安装 LAMP

源码编译安装 LAMP Apache 网站服务基础Apache 简介安装 httpd 服务器 httpd 服务器的基本配置Web 站点的部署过程httpd.conf 配置文件 构建虚拟 Web 主机基于域名的虚拟主机基于IP 地址、基于端口的虚拟主机 MySQL 的编译安装构建 PHP 运行环境安装PHP软件包设置 LAMP 组件环境…

住宅代理、移动代理和数据中心代理之间的区别

如果您是一名认真的互联网用户,可能需要反复访问某个网站或服务器,可能是为了数据抓取、价格比较、SEO 监控等用例,而不会被 IP 列入黑名单或被 CAPTCHA 阻止。 代理的工作原理是将所有传出数据发送到代理服务器,然后代理服务器将…

Vuforia AR篇(八)— AR塔防上篇

目录 前言一、设置Vuforia AR环境1. 添加AR Camera2. 设置目标图像 二、创建塔防游戏基础1. 导入素材2. 搭建场景3. 创建敌人4. 创建脚本 前言 在增强现实(AR)技术快速发展的今天,Vuforia作为一个强大的AR开发平台,为开发者提供了…

maven项目读取文件错误

开发工具:idea 一个简单的maven项目,程序读取不到src/main/resources目录下的文件 寻找了一些原因后,还是没解决,最后灵机一动改了设置居然好了。 然后就解决了

怎样把图片转成pdf文件,简鹿格式工厂轻松批量搞定

信息的存储和分享方式变得越来越多样化,而PDF文件以其跨平台兼容性和内容完整性,成为了许多用户首选的文档格式。无论是在学术研究、商务办公,还是个人创作中,将图片转换为PDF文件的需求日益凸显。 想象一下,当你需要整…

vue学习day04-计算属性、computed计算属性与methods方法、计算属性完整写法

10、计算属性 (1)概念: 基于现有的数据,计算出来的新属性。依赖于数据变化,自动重新计算。 (计算属性->可以将一段求值的代码进行封装) (2)语法: 1&a…

实现桌面动态壁纸(二)

目录 前言 一、关于 WorkerW 工作区窗口 二、关于窗口关系 2.1 窗口以及窗口隶属关系 2.2 桌面管理层窗口组分简析 2.3 厘清两个概念的区别 2.4 关于设置父窗口 三、编写代码以供在 Vista 上实现 3.1 方法二:子类化并自绘窗口背景 四、初步分析桌面管理层…

STM32的SPI接口详解

目录 1.SPI简介 2.SPI工作原理 3.SPI时序 3.1 CPOL(Clock Polarity,时钟极性): 3.2 CPHA(Clock Phase,时钟相位): 3.3 四种工作模式 4.相关代码 4.1使能片选信号 4.2使能通…

收银系统源代码-收银端UI风格

智慧新零售收银系统是一套线下线上一体化收银系统,给商户提供含线下收银称重、线上商城、精细化会员管理、ERP进销存、丰富营销活动、移动店务助手等一体化的解决方案。 如Windows版收银(exe安装包)、安卓版收银(apk安装包&#…

什么是 YAML?了解 YAML 语法与最佳实践

什么是 YAML YAML 是 "YAML Aint Markup Language" 的缩写,这是一种用于数据序列化的基于文本的标记语言。 YAML 的用途 YAML (YAML Aint Markup Language) 是一种人类可读的数据序列化格式,主要用于以下目的: 作为配置文件格式…

C++:C++入门基础|命名空间|输入输出

欢迎来到HarperLee的学习笔记! 博主主页传送门: HarperLee的博客主页! 想要一起进步的uu来后台哦! 一、什么是C? 在此之前,我们所学习的C语言是一种结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题&a…

25.无源蜂鸣器驱动设计

相对于有源蜂鸣器,无源蜂鸣器的成本更低,声音频率可控。而有源蜂鸣器因其内部 自带振荡源,只要加上适当的直流电源即可发声,程序控制较为方便。 (1)设计定义:设计一个无源蜂鸣器的驱动程序&…

二阶线性微分方程

假设一个质量 m 连接在弹簧和阻尼器上,系统受到外力 F(t) 的作用。设 x(t) 为质量的位移,系统的运动方程可以用牛顿第二定律表示为: 这是一个典型的二阶线性非齐次微分方程:其中: m 是质量(Fma&#xff09…

蓝桥杯备赛攻略(怒刷5个月拿省一)

十五届蓝桥杯结束,up也在这次比赛中获得了不错的成绩,为了帮助大家在25年蓝桥杯上获得好的成绩,我将根据今年的经验写一份蓝桥杯的备赛攻略,希望能帮到大家。 参赛准备 蓝桥杯算法赛必须指定一个编程语言赛道报名,也就…

Access系统开发必备技巧:轻松调整应用程序标题,提升用户体验!

Hi~ 大家好久不见呀! 一直忙,但不知道在忙啥,好多事情都落下了,ERP的文章最近也没有时间更新,接下去我还在考虑弄个直播,不知道大家有没有什么想了解的,大家给我留言,直播的时候给…

vue学习day02-Vue指令-v-html、v-show与v-if、v-else与v-else-if、v-on、v-bind、v-for、v-model

6、Vue指令 指令:带有v-前缀的特殊标签属性 (1)v-html 作用:设置元素的innerHTML 语法:v-html“表达式” 示例: 提供一个地址,这里是百度的地址,通过v-html渲染 结果&#xff…

怎么将图片旋转30度?旋转图片的几种方法推荐

怎么将图片旋转30度?在创作过程中,我们常常需要处理图片的镜像效果,确保其视觉效果和构图都达到最佳状态。镜像效果的合理运用不仅可以解决视觉单调的问题,还能在艺术作品中吸引观者的注意力。此外,镜像可以有效地调整…