放大特定的 MKMapView 框架

Posted

技术标签:

【中文标题】放大特定的 MKMapView 框架【英文标题】:Zoom on specific MKMapView frame 【发布时间】:2014-01-19 19:09:24 【问题描述】:

我的问题与one 有关。但是对于 ios7,我想知道是否有更简单的方法可以做到这一点。

所以基本上我有一个 MKMapView 处理视差效果,很像 Foursquare 应用程序。

那么,如何在MKMapView 的可见矩形上缩放所有注释?

现在我有一个可行的解决方案,它使用一些值来抵消我的注释的纬度,但我觉得这样做很奇怪。


详情:

为了使地图具有视差效果(当您在UITableView 上滚动时,地图也在滚动),您需要将地图的一部分保留在表格下方。在我的情况下,我的MKMapViewframe(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 上崩溃

将 MKMapView 移动到相对于 superview 的特定位置

如何使 MKMapView 从顶部进入

UIView 内的 MKMapView 框架没有改变

防止覆盖在缩放时消失 - MKMapView & MKOverlay