3

私は地図を扱っています。私は問題があります。次のコードを使用して、stackOverFlowのこのリンクの参照からズームし ました

地図をズームするのは簡単です。
しかし、現在、マップのズームインとズームアウトができません。それは私が別の場所を変えたり見つけたりできないことを意味します。現在の場所にのみ焦点を当てています。画像修正のように動作します。私は何をすべきか理解できませんか?助けてください。フォローする私のコード。

- (void) viewDidLoad
{
[self.mapView.userLocation addObserver:self 
                            forKeyPath:@"location" 
                               options:(NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld) 
                               context:nil];
}


-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 
{
MKCoordinateRegion region;
region.center = self.mapView.userLocation.coordinate;  

MKCoordinateSpan span; 
span.latitudeDelta  = 1; // Change these values to change the zoom
span.longitudeDelta = 1; 
region.span = span;

[self.mapView setRegion:region animated:YES];
}
4

1 に答える 1

2

問題は、ユーザーの場所の変更 (おそらく 1 秒間に複数回発生する) をリッスンしていて、マップ リージョンをそのリージョンに設定していることだと思います。

あなたがする必要があるのは、マップモードを自由な外観またはユーザーの場所に固定するように切り替えるボタンをマップに追加することです (Apple マップの左上隅のように)。

ユーザーがボタンを押すと、KVO を削除または追加します。または、コードでブール フラグを切り替えます。フラグが true の場合、マップ リージョンは変更されません。何かのようなもの:

@implementation YourController{
    BOOL _followUserLocation;
}

- (IBAction) toggleMapMode:(id)sender{
    _followUserLocation = !_followUserLocation;
}

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary             *)change context:(void *)context{
   if(_followUserLocation){
        MKCoordinateRegion region;
        region.center = self.mapView.userLocation.coordinate;  

        MKCoordinateSpan span; 
        // retain the span so when the map is locked into user location they can still zoom
        span.latitudeDelta  = self.mapView.region.span.latitudeDelta;
        span.longitudeDelta = self.mapView.region.span.longitudeDelta; 

        region.span = span;

        [self.mapView setRegion:region animated:YES];
    }
}

@end

たぶん、これらすべてが必要なわけではなく、必要なのは次のとおりです。

        // retain the span so when the map is locked into user location they can still zoom
        span.latitudeDelta  = self.mapView.region.span.latitudeDelta;
        span.longitudeDelta = self.mapView.region.span.longitudeDelta; 
于 2013-08-30T13:30:17.703 に答える