ios - MKMapView - 将 map 滚动限制为方形覆盖

标签 ios mkmapview mapkit mkoverlay

我有一个 MKMapView,上面有一个正方形叠加层,描述如下:

   CLLocationCoordinate2D coordsBg[5]={
    CLLocationCoordinate2DMake(31.750865,35.180882),
    CLLocationCoordinate2DMake(31.740331,35.180882),
    CLLocationCoordinate2DMake(31.740331,35.165452),
    CLLocationCoordinate2DMake(31.750865,35.165452),
    CLLocationCoordinate2DMake(31.750865,35.180882)
};     

MKPolygon *bg=[MKPolygon polygonWithCoordinates:coordsBg count:5];
[map addOverlay:bg];

我希望限制用户滚动到叠加层之外。

我可以为此限制 MKMapView ScrollView 吗?还是有其他方法?

谢谢

沙尼

最佳答案

经过几个小时的思考,我得到了这个对我来说非常有效的解决方案。

它混淆了:

这篇文章:set the zoom level of an mkmapview

还有这个链接:restrict mkmapview scrolling来自@Anna Karenina 对我的问题的评论。

这是我的代码:

- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated
{
    lastGoodMapRect = mapView.visibleMapRect;
    lastGoodRegion = mapView.region;
}

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{

    if (manuallyChangingMapRect) {
        manuallyChangingMapRect=NO;
        return;
    }

    if( [mapView zoomLevel] > 16 )
    {
        [mapView setCenterCoordinate:lastGoodRegion.center zoomLevel:16 animated:YES];
    }

    MKMapRect visibleRect = mapView.visibleMapRect;
    MKMapRect OverlayRect = bg.boundingMapRect;
    MKMapRect intersectionRect = MKMapRectIntersection(visibleRect,OverlayRect);

    //you can change the min and max zoom off course
    if(!MKMapRectEqualToRect(visibleRect,intersectionRect)){
        if( [mapView zoomLevel] < 15){

            [mapView setCenterCoordinate:lastGoodRegion.center zoomLevel:15 animated:YES];
        }else if( [mapView zoomLevel] > 16 )
        {
            [mapView setCenterCoordinate:lastGoodRegion.center zoomLevel:16 animated:YES];
        }else{
            manuallyChangingMapRect=YES;
            [mapView setVisibleMapRect:lastGoodMapRect animated:YES];
        }
    }

}

关于ios - MKMapView - 将 map 滚动限制为方形覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11152244/

相关文章:

iphone - iOS 6 上的 MapKit 崩溃

ios - 如何获取 GMSMarker X 和 y 坐标 iOS?

swift - 如何最好地从 Web 服务器加载 MapView 的位置

objective-c - 如何在 iOS 6 中将步行轨迹或路线显示为 map 叠加层

iPhone UISearchBar 需要点击两次才能被选中

ios - 如何使用 Swift 模糊 UIImageView 中的现有图像?

ios - 将 ios 5 模拟器安装到 xcode 5.1?

objective-c - 没有倒置标签的旋转 MKMapView

ios - 在 MapKit Swift 中禁用 Mylocation Marker Tap

ios - 根据对象类型更改 iOS 上的注释图像