ドキュメントをざっと見ると、その魔法が明らかになります。マップの を に
設定します。ここ
を参照してください。userTrackingMode
MKUserTrackingModeFollow
アップデート:
質問を更新したので、ここに新しい回答があります。
マップをユーザーの場所に再センタリングするには、単純なヘルパー メソッドを作成することをお勧めします。
- (void)recenterUserLocation:(BOOL)animated{
MKCoordinateSpan zoomedSpan = MKCoordinateSpanMake(1000, 1000);
MKCoordinateRegion userRegion = MKCoordinateRegionMake(self.mapView.userLocation.coordinate, zoomedSpan);
[self.mapView setRegion:userRegion animated:animated];
}
ユーザーがマップの移動を停止した場合は、少し遅れて呼び出す必要があります。regionDidChange
これは、mapView のデリゲート メソッドで行うことができます。
しかし、マップを実際にリセットする前にユーザーが地域を複数回変更した場合、reset-method をロックしないと問題が発生する可能性があります。したがって、マップを再センタリングできる場合は、フラグを立てることが賢明です。プロパティのようにBOOL canRecenter
。
それを初期化し、メソッドを次 のようにYES
更新します。recenterUserLocation
- (void)recenterUserLocation:(BOOL)animated{
MKCoordinateSpan zoomedSpan = MKCoordinateSpanMake(1000, 1000);
MKCoordinateRegion userRegion = MKCoordinateRegionMake(self.mapView.userLocation.coordinate, zoomedSpan);
[self.mapView setRegion:userRegion animated:animated];
self.canRecenter = YES;
}
これで、ユーザーが何らかの方法でマップを移動した後、少し遅れて安全に呼び出すことができます。
- (void)mapView:(MKMapView *)mMapView regionDidChangeAnimated:(BOOL)animated{
if (self.canRecenter){
self.canRecenter = NO;
[self performSelector:@selector(recenterUserLocation:) withObject:@(animated) afterDelay:3];
}
}