MKMapCamera无法缩放到正确的高度

时间:2018-09-27 10:29:52

标签: ios mapkit

当我在地图视图(MapKit)上设置具有特定高度的MKMapCamera时,有时无法缩放到正确的高度。我认为这与地图未完全加载有关,因此它会停在更高的位置(大约950m)而不是我设定的高度(大约280m)。

最初,当我第一次加载地图时,我注意到了这个问题,但它似乎与较低的海拔高度有关。更高的海拔似乎可以正常工作。

以下是演示问题的视频:https://streamable.com/644l1 在视频中,我将同一台摄像机设置了两次。

设置相机的代码:

let distance = currentHole!.teeCoordinate.distance(to: currentHole!.greenCoordinate)
let altitude = Double(distance) * 2.5

let camera = MKMapCamera(
    lookingAtCenter: currentHole!.centerCoordinate(),
    fromDistance: altitude,
    pitch: 0.0,
    heading: currentHole!.teeCoordinate.bearing(to: currentHole!.greenCoordinate) - 20
)
mapView.setCamera(camera, animated: true)

我也尝试使用类似的东西:

UIView.animate(withDuration: 1.0, animations: { () -> Void in
    self.mapView.camera = camera
}, completion: { (done) -> Void in
    print("Animation complete")
})

来做动画。当将持续时间设置为非常长的时间(例如10秒左右)时,它会更好地工作(不是完美的)。

关于这里可能有什么问题的任何想法?

更新:

这似乎仅在“卫星天桥”地图上发生。卫星很好。

1 个答案:

答案 0 :(得分:2)

我不确定为什么会这样,但是我有一个理论。使用天桥地图类型时,摄像头的最低高度受地图中心最高的结构限制。

如果转到“地图”应用,将其设置为“ 3D卫星”视图,然后直接转到高层建筑上方(例如纽约的帝国大厦),则只能捏捏以将其放大到略高于建筑物的高度。如果将相机从高大的结构上移开,则可以捏合以进一步放大。地图不允许您放大或放大结构。如果放大到高层建筑物的入口并尝试向建筑物平移,则地图将向上调整高度,而无需捏住以防止穿过建筑物。

因此,在地图完全加载之前,它不知道中心的最高结构是什么。为了防止您在高大建筑物内放大,地图会限制最小高度。地图完全加载后,它知道没有高大的结构,因此您可以放大到近距离。

在动画上设置较长的持续时间时,它使地图有机会在到达较低高度之前进行加载。该地图知道没有高大的结构,可以进一步放大。我想说的是,如果您尝试播放较长时间的动画,但限制了网络带宽,它将再次停止工作。

请注意,卫星模式可让您穿过高大的建筑物。

要解决此问题,请尝试使用mapViewDidFinishLoadingMap:mapViewDidFinishRenderingMap:fullyRendered:来了解何时放大。