次の質問に答える便利なデリゲート メソッドを誰かが教えてくれることを願っています。
私の質問は: ユーザーが MapKit によって初めて見つけられたことをどのように知ることができますか?
ビューが表示されたら、MKMapView にユーザーを見つけて、ユーザーの周りにマップ領域を設定するように指示します。最初にユーザーを見つけた後、マップをそのユーザーの場所に更新し続けたくありません。ユーザーがマップを自由にパンできるようにし、自動的に自分の場所に戻らないようにしたいと考えています。
ユーザーの位置を特定するのに時間がかかると問題が発生します (たとえば、ユーザーが初めてアプリを開いたとき、ユーザーが位置情報を共有することに同意するまで、MapKit はユーザーの位置を特定しません)。その結果、マップは大西洋のどこかで開かれ、ユーザーが見つかると自動的に修正されません。
残念ながら、 -(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation は、ユーザーの実際の場所が特定される前に数回呼び出されます (テスト時に、自分の場所を共有することに同意する前に、その NSLog ステートメントが表示されます) )。
- (void)viewDidLoad
{
[super viewDidLoad];
self.mapView.delegate=self;
}
-(void)viewWillAppear:(BOOL)animated{
[self.mapView setShowsUserLocation:YES];
[self.mapView setUserTrackingMode: MKUserTrackingModeNone];
hasUpdatedRegion=NO;
}
//MapKit Delegate Methods
-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
NSLog(@"didUpdateUserLocation");
if(!hasUpdatedRegion)
{
hasUpdatedRegion=YES;
MKCoordinateSpan span=MKCoordinateSpanMake(0.3, 0.3);
MKCoordinateRegion currentRegion=MKCoordinateRegionMake(mapView.userLocation.coordinate, span);
[mapView setRegion:currentRegion];
}
}
-(void)mapView:(MKMapView *)mapView didChangeUserTrackingMode:(MKUserTrackingMode)mode animated:(BOOL)animated{
NSLog(@"didChangeTrackingMode");
}