SwiftUI 官方教程(五)

摘要:
官方SwiftUI教程(V)5.使用UIKit和SwiftUI,我们现在可以创建地图视图了。接下来,使用MapKit中的MKMapView类渲染地图。SwiftUI包括类似于WatchKit和AppKitview的协议。SwiftUI教程5.1选择文件˃新建˃文件,选择iOS平台,选择SwiftUIView模板,然后单击下一步。将新文件命名为MapView。swift,然后单击“创建”。SwiftUI Tutorial MapView swiftimportSwiftUIimportMapKitstructMapView:UIViewRepresentable{varbody:someView{Text}}structMapView _ Preview:PreviewProvider{static varpreview:someView{MapView()}}UIViewRepublicable协议需要实现两种方法:makeUIView用于创建MKMapView,updateUIView用于配置视图并响应更改。地图视图。swiftimportSwiftUIimportMapKitstructMapView:UIViewRepresentable{typealiasUIViewType=MKMapViewfuncmakeUIView-˃MKMapView{returnMKMapView}}structMapView _ Preview:PreviewProvider{static varpreviews:someView{MapView()}5.4实现updateUIView方法,设置MapView的坐标,并使其以TurtleRock为中心。SwiftUI教程5.5单击LivePreview将预览切换到实时模式,有时使用TryAgain或Resume按钮。
SwiftUI官方教程(五)

5. 同时使用 UIKit 和 SwiftUI

至此,我们已准备好创建 map view 了,接下来使用 MapKit 中的 MKMapView 类来渲染地图。

在 SwiftUI 中使用 UIView 子类,需要将其他 view 包装在遵循 UIViewRepresentable 协议的 SwiftUI view 中。 SwiftUI 包含了和 WatchKit 、 AppKit view 类似的协议。

SwiftUI 官方教程(五)第1张

首先,我们创建一个可以呈现 MKMapView 的自定义 view。

SwiftUI教程

5.1 选择 File > New > File ,选择 iOS 平台,选择 SwiftUI View 模板,然后单击 Next 。将新文件命名为 MapView.swift ,然后单击 Create 。

SwiftUI 官方教程(五)第2张

5.2 给 MapKit 添加 import 语句,声明 MapView 类型遵循 UIViewRepresentable 。

可以忽略 Xcode 的错误,接下来的几步会解决这些问题。

SwiftUI教程

MapView.swift

import SwiftUI
import MapKit

struct MapView: UIViewRepresentable {
    var body: some View {
        Text("Hello World")
    }
}

struct MapView_Preview: PreviewProvider {
    static var previews: some View {
        MapView()
    }
}

UIViewRepresentable 协议需要实现两个方法: makeUIView(context:) 用来创建一个 MKMapView, updateUIView(_:context:) 用来配置 view 并响应修改。

5.3 用 makeUIView(context:) 方法替换 body 属性,该方法创建并返回一个空的 MKMapView

MapView.swift

import SwiftUI
import MapKit

struct MapView: UIViewRepresentable {
	
	typealias UIViewType = MKMapView

    func makeUIView(context: UIViewRepresentableContext<MapView>) -> MKMapView {
        return MKMapView(frame: .zero)
    }
}

struct MapView_Preview: PreviewProvider {
    static var previews: some View {
        MapView()
    }
}

5.4 实现 updateUIView(_:context:) 方法,给 map view 设置坐标,使其在 Turtle Rock 上居中。

MapView.swift

import SwiftUI
import MapKit

struct MapView : UIViewRepresentable {
    
    typealias UIViewType = MKMapView
    
    func makeUIView(context: UIViewRepresentableContext<MapView>) -> MKMapView {
        return MKMapView(frame: .zero)
    }
    
    func updateUIView(_ uiView: MKMapView, context: UIViewRepresentableContext<MapView>) {
        let coordinate = CLLocationCoordinate2D(
            latitude: 34.011286, longitude: -116.166868)
        let span = MKCoordinateSpan(latitudeDelta: 2.0, longitudeDelta: 2.0)
        let region = MKCoordinateRegion(center: coordinate, span: span)
        uiView.setRegion(region, animated: true)
    }
}

struct MapView_Preview: PreviewProvider {
    static var previews: some View {
        MapView()
    }
}

当预览处于 static mode 时仅显示 SwiftUI view 。因为 MKMapView 是一个 UIView 的子类,所以需要切换到实时模式才能看到地图。

SwiftUI教程

5.5 单击 Live Preview 可将预览切换为实时模式,有时也会用到 Try Again 或 Resume 按钮。

片刻之后,你会看到 Joshua Tree National Park 的地图,这是 Turtle Rock 的故乡。

SwiftUI 官方教程(五)第3张

SwiftUI 官方教程(五)第4张

SwiftUI 教程(四)

免责声明:文章转载自《SwiftUI 官方教程(五)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇secureCRT命令大全高效 告别996,开启java高效编程之门 2-3实战:硬编码业务逻辑下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

opencv视觉系统开发教程资料下载

opencv视觉系统开发教程资料下载 转 https://bbs.52iss.com/forum.php?mod=viewthread&tid=3995&extra=opencv对于编程绝对是一个好东西。opencv的意思是开放源代码计算机视觉类库(open source computer vision library),未来研究人工智能可...

怎么彻底关闭flash助手弹窗?

日常使用中,flash助手弹窗不胜其扰,天天推荐游戏,早看它不顺眼了,那么怎么彻底关闭flash助手弹窗呢?我认真分析了下,做了个教程 1.打开任务管理器,并打开服务  右键->属性->禁用->应用 经过这些操作,就可以彻底禁掉flash助手频繁弹窗,打扰正常工作了. 喜欢的点个赞或者评论下,搞定收工!...

Jupyter、Jupytext的安装使用教程

1.Jupyter的安装教程:https://jupyter.org/install.html 2.Jupyter的安装教程2:https://jupyterlab.readthedocs.io/en/stable/getting_started/installation.html 3.Jupytext安装使用教程:https://www.pianshen...

28个在线学习网站让你变身齐天大圣!

  无论是考虑换工作成为一个全职的程序猿,还是试图搭建一个网站,亦或是想要掌握更多的技能,总之现在越来越多的人都开始学习如何编程。虽然编程不一定适合所有人,但是对相关的知识多深入了解一下总归是有一些好处的。   在正式介绍这些学习网站给大家之前,我想和大家分享一些来自Marissa Louie的忠告。Marissa Louie是Ness Computing的...

图形学实验用的VS2017本地环境配置,VS 2017配置opencv、Eigen

最近在进行图形学相关实验时,会用到VS 2017,虚拟机里的VScode卡得小宇宙爆发,索性就在本地进行配置吧。这个过程主要需要配置 opencv 和 Eigen 线代库。下面是配置教程: 一、VS2017 配置OpenCV 这是我看到的最详细的配置教程:VS2017配置opencv教程(超详细!!!) 配置问题 在配置好后,测试运行时,我的报错“由于找不...

Android 开 发 资 源 分 享

一、精编教程贴 1、安卓模拟器BlueStacks安装使用教程 http://www.apkbus.com/android-64318-1-1.html 2、Mkey libgdx游戏引擎教程 http://www.apkbus.com/android-57355-1-1.html 3、java基础 与 android学习指南——实例教程 http://w...