当前位置: 首页 > news >正文

如何在 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 的强大功能,包括定制地图样式、交互方式和控件,为开发者提供了更多灵活性和可定制性的选择。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 如何在 Windows 10 上恢复未保存的 Word 文档
  • 机器学习——关于极大似然估计法的一些个人思考
  • unity使用 MQTT复现plant simulate仿真
  • Git详解
  • 安防管理平台LntonCVS视频汇聚融合云平台智慧火电厂安全生产管理应用方案
  • 数据模型-ER图在数据模型设计中的应用
  • 数据无忧:Ubuntu 系统迁移备份全指南
  • 汇川CodeSysPLC教程03-2-14 与HMI通信
  • Java泛型的定义与运用
  • Linux | 安装lb-toolkits 1.2.4库
  • 信创:鲲鹏(arm64)+麒麟(kylin v10)离线部署k8s和kubesphere(含离线部署新方式)
  • STM32 SPI世界:W25Q64 Flash存储器的硬件与软件集成策略
  • Riscv 架构的合规测试
  • 【简历】湖南某一本大学:JAVA实习简历指导,面试通过率比较低
  • CBCOI招人啦!!!!!!!!
  • 《深入 React 技术栈》
  • css选择器
  • Gradle 5.0 正式版发布
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • PAT A1050
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • SQLServer之索引简介
  • Theano - 导数
  • V4L2视频输入框架概述
  • 从伪并行的 Python 多线程说起
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 手写双向链表LinkedList的几个常用功能
  • 微信小程序设置上一页数据
  • 怎么将电脑中的声音录制成WAV格式
  • 7行Python代码的人脸识别
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​Java基础复习笔记 第16章:网络编程
  • ​TypeScript都不会用,也敢说会前端?
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • #565. 查找之大编号
  • #git 撤消对文件的更改
  • #laravel部署安装报错loadFactoriesFrom是undefined method #
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (二)丶RabbitMQ的六大核心
  • (函数)颠倒字符串顺序(C语言)
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (算法)求1到1亿间的质数或素数
  • (转)C#调用WebService 基础
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .net core Redis 使用有序集合实现延迟队列
  • .net core webapi 大文件上传到wwwroot文件夹
  • .Net Core 微服务之Consul(二)-集群搭建
  • .NET 药厂业务系统 CPU爆高分析