如何在 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 是一款带锁的免费安卓日记工具。 它可用于记录每日日记、秘密想法、旅程、心情追踪或任何私人时刻。 你可…

防止应用调试分析IP被扫描加固实战教程

常用的抓包工具有很多,它们可以帮助你捕获和分析网络流量,包括应用程序与服务器之间的通信。以下是一些常用的抓包工具: 常用的抓包工具 1. Wireshark:最广泛使用的网络协议分析工具,可以捕获和分析几乎所有类型的网…

构建LangChain应用程序的示例代码:60、探索 OpenAI V1 新功能及其在 LangChain 中的应用

示例展示了OpenAI最新发布的一些重要功能,包括视觉处理、Assistants API、JSON模式、系统指纹等,以及如何在LangChain中使用这些功能。它还介绍了一些与Azure相关的重大变更,以及如何使用工具进行并行函数调用。这些新功能和变更为开发更复杂、更强大的AI应用程序提供了更多可能…

☺初识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 阻止。 代理的工作原理是将所有传出数据发送到代理服务器,然后代理服务器将…

mysql数据库的搭建和操作

mysql数据库的搭建和操作 1: 去官网下载mysql的服务端: https://www.mysql.com/ 下载mysql服务器 2: 安装好mysql服务,设置好初始化的根用户密码: 记住根用户的密码; 3: windows 启动服务: mysql notifier或windows服务管理器启动; 4: mysql客户端: Mac OS: Sequel Pro/命令行…

LeetCode每日一题 分发糖果

题目描述 n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。 你需要按照以下要求,给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果。相邻两个孩子评分更高的孩子会获得更多的糖果。 请你给每个孩子分发糖果,计算并返回…

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

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

maven项目读取文件错误

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

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

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

258. 各位相加

哈喽!大家好,我是奇哥,一位专门给面试官添堵的职业面试员 文章持续更新,可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】更有我为大家准备的福利哟! 文章目录 一、题目二、答案三、总结 给定一个非…

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

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

C++:cv::Mat的列数与行数属性

在OpenCV中,cv::Mat 类是一个非常核心的数据结构,用于存储图像或数值数据。这个类提供了丰富的功能来操作这些数据,包括访问、修改和转换数据等。cv::Mat 类的 cols 和 rows 属性分别代表矩阵(或图像)的列数和行数。 c…

Android中android.content.res.Resources$NotFoundException的问题

最近在调试程序的时候发现一个比较诡异的问题。 E FATAL EXCEPTION: main Process: com.eathemeat.justplayer, PID: 22047 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.eathemeat.justplayer/com.eathemeat.justplayer.play.PlayActivity}: an…

已解决java.sql.SQLNonTransientConnectionException: Cannot load connection class because of underly,亲测有效

文章目录 问题分析报错原因解决思路解决方法1. 添加 JDBC 驱动程序到类路径2. 检查数据库连接配置3. 检查版本兼容性4. 检查安全设置5. 清理和重建项目6. 查看日志和异常堆栈 注意事项 java.sql.SQLNonTransientConnectionException: Cannot load connection class because of …

实现桌面动态壁纸(二)

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

服务器安装多个Tomcat

服务器安装多个Tomcat 因为申请了一个域名,然后想设置一个二级域名,让不同的二级域名访问到不同的项目,例如blog.booleandev.xyz访问到博客项目,www.booleandev.xyz访问到主页,网上找了找资料,发现一般是使…

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使能通…