3

私はこのリンクのショーとして地図を作成しました、そしてそれは完全に機能しています。

しかし、問題は、一方向にのみズームすることです(大きくなるだけです)。どうすればどちらの方法でも機能させることができますか?

グーグルマップにあるようなものかもしれません(プラス-左側のマイナススティック)。

4

2 に答える 2

3

ズームインの場合

-(void)zoomIn
{
    region.span.latitudeDelta = region.span.latitudeDelta/4 ;
    region.span.longitudeDelta = region.span.longitudeDelta/4;



    region.center.latitude = mapView.centerCoordinate.latitude ;
    region.center.longitude = mapView.centerCoordinate.longitude ;
    [mapView setRegion:region animated:YES];
}

ZoomOutの場合

-(void)zoomOut
{
    region.span.latitudeDelta = region.span.latitudeDelta*4 ;
    region.span.longitudeDelta = region.span.longitudeDelta*4;



    region.center.latitude = mapView.centerCoordinate.latitude ;
    region.center.longitude = mapView.centerCoordinate.longitude ;
    [mapView setRegion:region animated:YES];
}

この構造のデルタ値を使用して、マップの目的のズームレベルを示します。デルタ値が小さいほど、ズームレベルが高くなります。

詳細については、このリンクを参照してください。

于 2012-11-14T15:01:37.617 に答える
0

これは、MidhunVPとSlavcoPetkovskiによる回答の改訂版であり、latitudeDeltaを大きく設定しすぎると、zoomOutの「InvalidRegion」に対するNSInvalidArgumentExceptionが回避されます。ズームインしても問題はないようです。制限に達すると、ズームインしなくなります。

- (void)zoomIn {
    MKCoordinateRegion region = [self.mapView region];
    region.span.latitudeDelta = region.span.latitudeDelta/4;
    region.span.longitudeDelta = region.span.longitudeDelta/4;
    region.center.latitude = self.mapView.centerCoordinate.latitude;
    region.center.longitude = self.mapView.centerCoordinate.longitude;
    [self.mapView setRegion:region animated:YES];
    //NSLog(@"zoomIn: center %lf, %lf; spanDelta %lf, %lf, upper left %lf, %lf; lower right %lf %lf", region.center.latitude, region.center.longitude, region.span.latitudeDelta, region.span.longitudeDelta, region.center.latitude + region.span.latitudeDelta / 2, region.center.longitude - region.span.longitudeDelta / 2, region.center.latitude - region.span.latitudeDelta / 2, region.center.longitude + region.span.longitudeDelta / 2);
}

- (void)zoomOut {
    MKCoordinateRegion region = [self.mapView region];
    region.span.latitudeDelta = region.span.latitudeDelta*4;
    region.span.longitudeDelta = region.span.longitudeDelta*4;
    region.center.latitude = self.mapView.centerCoordinate.latitude;
    region.center.longitude = self.mapView.centerCoordinate.longitude;

    // The region upper latitude must not exceed 90.0 degrees, and the region lower latitude must not fall below -90.0.
    double upperLatitude = region.center.latitude + region.span.latitudeDelta / 2.0;
    double lowerLatitude = region.center.latitude - region.span.latitudeDelta / 2.0;
    if ( upperLatitude > 90 || lowerLatitude < -90 ) {
        region.center.latitude = 0.0;
        double spanRatio = region.span.latitudeDelta / region.span.longitudeDelta;
        region.span.latitudeDelta = 180;
        region.span.longitudeDelta = 180 / spanRatio;
    }
    [self.mapView setRegion:region animated:YES];
    //NSLog(@"zoomOut: center %lf, %lf; spanDelta %lf, %lf, upper left %lf, %lf; lower right %lf %lf", region.center.latitude, region.center.longitude, region.span.latitudeDelta, region.span.longitudeDelta, region.center.latitude + region.span.latitudeDelta / 2, region.center.longitude - region.span.longitudeDelta / 2, region.center.latitude - region.span.latitudeDelta / 2, region.center.longitude + region.span.longitudeDelta / 2);
}
于 2016-07-31T20:01:36.777 に答える