MKMapView visibleMapRect不完全可见

时间:2014-10-24 03:46:14

标签: ios8 mkmapview mapkit overlay region

我有MKMapView使用MKPolygon标记特定区域。我希望地图具有适合mapView /屏幕的最小缩放系数,意味着完全可见。

为实现这一点,我尝试了以下

MKPolygon *overlay;
[[self mapView] setVisibleMapRect:[overlay boundingMapRect] edgePadding:UIEdgeInsetsMake(16, 16, 16, 16) animated:YES];

不幸的是我的mapView没有将整个矩形设置为可见。 rect 填充地图而不是拟合

这就是我需要的东西,而不是我得到的东西:

what i wantenter image description here

我如何实现目标?

3 个答案:

答案 0 :(得分:4)

我终于找到了答案。它没有必要对MKMapView做任何事情。我刚刚开始在Xcode 6中使用大小类,因此找到了我的问题。

[MKMapView -setVisibleMapRect:edgePanning:animated:]的调用过早,即-viewDidLoad方法。

当我想到Annas comment时,我发现了一点点,我发现她是完全正确的。然后我意识到我应该稍后调用mapView方法,例如-viewDidLayoutSubviews

当我移动一行时,它工作得非常完美!谢谢,Anna

答案 1 :(得分:1)

您希望[overlay boundingMapRect]通过-[[self mapView] mapRectThatFits:]

  

一个地图矩形仍然居中于地图的同一个点,但其宽度和高度会调整为适合地图视图的框架。

答案 2 :(得分:0)

如果在-viewDidLayoutSubviews中设置了-setVisibleMapRect,那么当地图放大/缩小时,将重置可见的maprect。

我的增强功能是:定义一个类级别标志,并仅在该标志打开时调用-setVisibleMapRect。调用-setVisibleMapRect后,关闭标志。从现在开始,放大/缩小地图不会重置可见的地图。这是我在Swift中的代码:

var resetMapRect = true // class level variable

override void viewDidLayoutSubviews() {
    if resetMapRect {
        // set visible maprect here
        resetMapRect = false // no more setting maprect
    }
}