我有一个 SwiftUI MapKitView,它遵循适用于 macOS的https://www.hackingwithswift.com/books/ios-swiftui/advanced-mkmapview-with-swiftui中的模式。在makeNSView
我为要显示的位置的有趣位设置区域时,与窗口大小无关,并且默认情况下,无论 NSWindow 是横向多于纵向还是相反,我都可以使此代码适当地缩放。
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)
}
似乎mapView.region
在返回时实际上并没有更新setRegion()
问题是我想定位地图而不是真正的北方,所以我必须设置一个相机。
但是,fromDistance:
创建 MKMapCamera 的参数必须根据设置的区域计算,但是一旦设置了区域,相机的视场角是多少才能确定包含正确范围的窗口需要多高?我基本上希望缩放级别设置与通过相同,fittedRegion
并希望在相机中复制具有更改标题的缩放级别(间距为 0)
似乎MKMapViewDelegate
有一个mapViewDidChangeVisibleRegion
,我认为 Coordinator 是 SwiftUI 中的代表。我可以在多次调用时看到该区域updateNSView
,但在实际设置之前需要进行几次调用。我怀疑将相机设置在那里会产生另一个updateNSView()
会造成问题的呼叫。
如何定位地图以包含给定区域范围,而不管窗口大小与初始加载时的缩放级别和标题(但随后让用户按照他们认为合适的方式进行操作)..