2

私はMkMapViewを持っていて、マップをユーザーの場所の中央に配置したいと思っています。これは、スコープボタンを押したときのiPhoneマップアプリケーションと同じです。

ズームを設定する必要がないため、setCenterCoordinateメソッドを使用しています。ロケーションマネージャーからロケーションが更新されるたびに使用します。

問題は、0.5秒(約)ごとに更新されるため、このメソッド「setCenterCoordinate」が常に呼び出され、アプリがハングすることです。マップビューから離れたタブに切り替える必要がある場合は、他のタブを押し続けてそれを実行する必要があります。

さて、このすべてのテキストは、MkMapViewがユーザーの場所(青い点)に中央を設定するようにする適切な方法があるかどうかを尋ねるだけです。

ありがとう

4

2 に答える 2

7

別のロケーション マネージャーを使用する代わりに、KVO 通知を通じて のuserLocation.locationプロパティの更新を取得するためのより良い方法については、既に説明しました。CLLocationManager を使用せずに MKMapView をユーザーの現在の場所にズームするにはどうすればよいですか?MKMapView

もちろん、KVO 通知を受け取るメソッドにいくつかの変更を加える必要があります。そんな感じ:

-(void)observeValueForKeyPath:(NSString *)keyPath  
                     ofObject:(id)object  
                       change:(NSDictionary *)change  
                      context:(void *)context {  

    if ([self.mapView isUserLocationVisible]) {  
       [self.mapView setCenterCoordinate:self.mapView.userLocation.location.coordinate
                                animated:YES];
    }
}

このコードをテストしましたが、正常に動作します。

于 2010-04-08T12:05:02.380 に答える
0

ddnvの答えに加えて:

次のようなViewControllerのviewWillDisappear(または<iOS 6.0ではviewDidUnload)メソッドでオブザーバーを停止することを忘れないでください。

    [self.mapView.userLocation removeObserver:self forKeyPath:@"location"];

そうしないと、アプリが激しくクラッシュします。

于 2013-01-06T16:39:46.763 に答える