我有MKMapView
使用MKPolygon
标记特定区域。我希望地图具有适合mapView /屏幕的最小缩放系数,意味着完全可见。
为实现这一点,我尝试了以下
MKPolygon *overlay;
[[self mapView] setVisibleMapRect:[overlay boundingMapRect] edgePadding:UIEdgeInsetsMake(16, 16, 16, 16) animated:YES];
不幸的是我的mapView没有将整个矩形设置为可见。 rect 填充地图而不是拟合。
这就是我需要的东西,而不是我得到的东西:
与
我如何实现目标?
答案 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
}
}