以编程方式放大MKMapView

Hec*_*ret 24 iphone mapkit mkmapview

我正在使用MKMapViewiPhone应用程序内部.单击按钮时,缩放级别必须增加.这是我的第一个方法:

MKCoordinateRegion zoomIn = mapView.region;
zoomIn.span.latitudeDelta *= 0.5;
[mapView setRegion:zoomIn animated:YES];
Run Code Online (Sandbox Code Playgroud)

但是,这段代码没有效果,因为我没有更新longitudeDelta值.所以我添加了这一行:

zoomIn.span.longitudeDelta *= 0.5;
Run Code Online (Sandbox Code Playgroud)

现在它有效,但有时候.该latitudeDeltalongitudeDelta不以同样的方式改变,我的意思是,他们的价值是不成正比.不知道怎么解决这个问题?

小智 27

我不知道这是否是正确的方法,但我正在使用它来放大和缩小.

        case 0: { // Zoom In
        //NSLog(@"Zoom - IN");
        MKCoordinateRegion region;
        //Set Zoom level using Span
        MKCoordinateSpan span;  
        region.center=mapView.region.center;

        span.latitudeDelta=mapView.region.span.latitudeDelta /2.0002;
        span.longitudeDelta=mapView.region.span.longitudeDelta /2.0002;
        region.span=span;
        [mapView setRegion:region animated:TRUE];
    }
        break;

    // Zoom Out 
    case 2: {
        //NSLog(@"Zoom - OUT");
        MKCoordinateRegion region;
        //Set Zoom level using Span
        MKCoordinateSpan span;  
        region.center=mapView.region.center;
        span.latitudeDelta=mapView.region.span.latitudeDelta *2;
        span.longitudeDelta=mapView.region.span.longitudeDelta *2;
        region.span=span;
        [mapView setRegion:region animated:TRUE];
    }
Run Code Online (Sandbox Code Playgroud)

  • 嘿Zoom -Out Code在我连续按下时崩溃,你能告诉我如何解决吗?这是崩溃日志:终止应用程序由于未捕获的异常'NSInvalidArgumentException',原因:'无效区域<center:+13.06748979,+ 80.24493745 span:+245.43019431,+ 223.01760747>' (2认同)

Kev*_*vin 23

只是清理dkdarel的答案

// delta is the zoom factor
// 2 will zoom out x2
// .5 will zoom in by x2
- (void)zoomMap:(MKMapView*)mapView byDelta:(float) delta {

    MKCoordinateRegion region = mapView.region;
    MKCoordinateSpan span = mapView.region.span;
    span.latitudeDelta*=delta;
    span.longitudeDelta*=delta;
    region.span=span;
    [mapView setRegion:region animated:YES];

}
Run Code Online (Sandbox Code Playgroud)

SWIFT代码:

func zoomMap(byFactor delta: Double) {
    var region: MKCoordinateRegion = self.mapView.region
    var span: MKCoordinateSpan = mapView.region.span
    span.latitudeDelta *= delta
    span.longitudeDelta *= delta
    region.span = span
    mapView.setRegion(region, animated: true)
}
Run Code Online (Sandbox Code Playgroud)


Roo*_*elt 22

这是一个更简单的解决方案

MKUserLocation *userLocation = mapView.userLocation;
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance (
      userLocation.location.coordinate, 50, 50);
[mapView setRegion:region animated:NO];
Run Code Online (Sandbox Code Playgroud)


fra*_*yer 1

我使用与你类似的代码,它似乎有效。可能发生的情况是您的增量变化不足以导致缩放级别从一个谷歌缩放级别增加到下一个。这还取决于地图的初始状态,这可以解释为什么它是间歇性的 - 那么在用户按下缩放按钮之前,如何开始设置地图和缩放级别?

您还可以查看regionThatFits方法,它将调整您提供的区域(名称来自内存,因为我手边没有苹果文档)。