2011-12-19 6 views
2

私はMKMapViewMKUserTrackingBarButtonItemを持っています。ユーザーの現在の位置は、FollowまたはFollowWithHeadingモードでのみ表示する必要があります。実装は次のようになります。MKMapViewのshowsUserLocationの不規則な振る舞い

- (void)mapView:(MKMapView *)mapView 
didChangeUserTrackingMode:(MKUserTrackingMode)mode 
     animated:(BOOL)animated 
{ 
    [mapView setShowsUserLocation:(mode != MKUserTrackingModeNone)]; 
} 

これはsetShowsUserLocationが呼び出された私のコードで唯一の場所であり、それはMKUserTrackingBarButtonItemが押されたときに期待どおりに動作します。

マップをドラッグしてUserTrackingModeを変更すると、この問題が発生します。この場合、「青い点」の注釈は意図したとおりに消えますが、ドラッグの終了時には約20%のケースで再表示されます。

マップのshowsUserLocationプロパティをテストすると、「青い点」の注釈が表示されていても、常にNOに設定されます。

これを解決する方法がわかっていると、非常に感謝しています。

答えて

1

ドラッグ中に特定の時刻にユーザーの場所の更新が入った場合、showsUserLocationNOであっても、didUpdateUserLocationデリゲートメソッドが実行され、青い点が再表示されるようです。

これは地図表示の欠点と思われる。 didUpdateUserLocationshowsUserLocationを切り替える

は、マップビューの内部状態を修正するようだと青のドットが消える:

-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation 
{ 
    if (!mapView.showsUserLocation) 
    { 
     mapView.showsUserLocation = YES; 
     mapView.showsUserLocation = NO; 
    } 
} 
+0

これは動作しますが、あなたに感謝します! – carton

関連する問題