首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SwiftUI中以编程方式计算MKMapCamera centerCoordinateDistance

如何在SwiftUI中以编程方式计算MKMapCamera centerCoordinateDistance
EN

Stack Overflow用户
提问于 2020-06-15 14:00:41
回答 2查看 185关注 0票数 1

我有一个SwiftUI MapKitView,它遵循https://www.hackingwithswift.com/books/ios-swiftui/advanced-mkmapview-with-swiftui中的模式,适用于macOS。在makeNSView中,我为我想要显示的位置设置感兴趣的区域,与窗口大小无关,我可以让这段代码在默认情况下适当缩放,无论NSWindow是横向多过纵向多还是反之亦然。

代码语言:javascript
复制
 func makeNSView(context: Context) -> MKMapView {
    let mapView = MKMapView()
    mapView.delegate = context.coordinator
    mapView.mapType = .satellite
    mapView.pointOfInterestFilter = .excludingAll
    let region = MKCoordinateRegion(center: centroid, latitudinalMeters: 1160, longitudinalMeters: 1260)
    let fittedRegion = mapView.regionThatFits(region)
    mapView.setRegion(fittedRegion, animated: false)
}

在返回setRegion()时,mapView.region似乎并未实际更新

问题是我想要调整地图的方向,而不是正北方向,所以我必须设置一个摄像头。

但是,creating MKMapCamera中的fromDistance:参数必须根据设置的区域计算,但是设置区域后,相机的视场角度是多少,才能确定包含窗口的正确范围需要多高?我基本上想通过fittedRegion设置相同的变焦级别,并希望在相机中复制更改后的方向(间距为0)。

看起来MKMapViewDelegate有一个mapViewDidChangeVisibleRegion,我想协调员就是SwiftUI中的代表。我可以在多个对updateNSView的调用中看到该区域,尽管它在实际设置之前需要几次调用。我怀疑在那里设置摄像头会创建另一个updateNSView()调用,这会带来问题。

我如何调整地图的方向,使其包括给定的区域范围,而不考虑窗口大小、缩放级别和初始加载方向(然后让用户按自己认为合适的方式进行操作)。

EN

回答 2

Stack Overflow用户

发布于 2020-06-15 14:35:15

请尝试以下操作

代码语言:javascript
复制
func makeNSView(context: Context) -> MKMapView {
    let mapView = MKMapView()
    mapView.delegate = context.coordinator
    mapView.mapType = .satellite
    mapView.pointOfInterestFilter = .excludingAll
    let region = MKCoordinateRegion(center: centroid, latitudinalMeters: 1160, longitudinalMeters: 1260)
    let fittedRegion = mapView.regionThatFits(region)

    DispatchQueue.main.async {
       mapView.setRegion(fittedRegion, animated: false)
    }
    return mapView
}
票数 0
EN

Stack Overflow用户

发布于 2020-06-15 14:55:08

我想我想通了。

在协调器中响应func mapViewDidFinishLoadingMap(_ mapView: MKMapView)并将mapView.camera.heading设置为适当的值,这是我想要做的事情。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62382226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档