放大特定的 MKMapView 框架
Posted
技术标签:
【中文标题】放大特定的 MKMapView 框架【英文标题】:Zoom on specific MKMapView frame 【发布时间】:2014-01-19 19:09:24 【问题描述】:我的问题与one 有关。但是对于 ios7,我想知道是否有更简单的方法可以做到这一点。
所以基本上我有一个 MKMapView
处理视差效果,很像 Foursquare 应用程序。
那么,如何在MKMapView
的可见矩形上缩放所有注释?
现在我有一个可行的解决方案,它使用一些值来抵消我的注释的纬度,但我觉得这样做很奇怪。
详情:
为了使地图具有视差效果(当您在UITableView
上滚动时,地图也在滚动),您需要将地图的一部分保留在表格下方。在我的情况下,我的MKMapView
的frame
是(0 -120; 320 390)
,它的可见框架是(0 0, 320 150);
。所以这里的目标是能够在可见的frame
上显示注释(放大)。
【问题讨论】:
【参考方案1】:这样的东西应该可以工作,但我还没有真正尝试过代码:
MKAnnotation* firstAnnotaiton = annotations[0];
CLLocationDegrees north = firstAnnotation.coordinate.latitude;
CLLocationDegrees south = firstAnnotation.coordinate.latitude;
CLLocationDegrees east = firstAnnotation.coordinate.longitude;
CLLocationDegrees west = firstAnnotation.coordinate.longitude;
for (int i = 1; i < annotations.count; i++)
MKAnnotation* annotation = annotations[i];
if (north < firstAnnotation.coordinate.latitude)
north = firstAnnotation.coordinate.latitude;
if (south > firstAnnotation.coordinate.latitude)
south = firstAnnotation.coordinate.latitude;
if (west < firstAnnotation.coordinate.longitude)
west = firstAnnotation.coordinate.longitude;
if (east > firstAnnotation.coordinate.longitude)
east = firstAnnotation.coordinate.longitude;
MKMapPoint upperLeft = MKMapPointForCoordinate(CLLocationCoordinate2DMake(
north,
west
));
MKMapPoint lowerRight = MKMapPointForCoordinate(CLLocationCoordinate2DMake(
south,
east
));
MKMapRect rect = MKMapRectMake(
upperLeft.x,
upperLeft.y,
lowerRight.x - upperLeft.x,
lowerRight.y - upperLeft.y
);
rect = [self.mapView mapRectThatFits:rect edgePadding:self.boundsInsets];
[self.mapView setVisibleMapRect:rect animated:animated];
这里的关键是让self.boundsInsets
成为UIEdgeInsets
,指定视图实际大小与其可见边界之间的差异。
【讨论】:
我不完全确定我是否理解了你的问题,但如果不只是更详细地解释一下,我可能会为你解决。 我添加了更多细节@StefanFisk 酷,那么这应该可以工作,只需创建一个顶部和底部 120 像素的插图。 + 您可能需要的任何额外边距(至少是您用于注释的任何图形半径的一半) 在什么地方指定inset
和缩放级别?以上是关于放大特定的 MKMapView 框架的主要内容,如果未能解决你的问题,请参考以下文章
如果在主页按钮位于右侧时以横向模式初始化,iOS MKMapView 将显示空白地图
放大时使用 MKMapView 在 setUserTrackingMode 上崩溃