mkmapviewタブバーアプリ(iOS)で2回目ではなく、ユーザーの位置を1回ズームインしますが
-
27-10-2019 - |
質問
Tab Barベースのアプリにナビゲーションコントローラーの一部としてMKMAPViewがあります。
最初のビューコントローラーでUIBUTTONをクリックすると、MKMAPViewを含む2番目のビューコントローラーにプッシュします。マップビューがロードされると、以下を使用してユーザーの場所にズームインします。
- (void)mapView:(MKMapView *)theMapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
if ( !initialLocation )
{
self.initialLocation = userLocation.location;
MKCoordinateRegion region;
region.center = theMapView.userLocation.coordinate;
region.span = MKCoordinateSpanMake(2.0, 2.0);
region = [theMapView regionThatFits:region];
[theMapView setRegion:region animated:YES];
}
}
MapViewの上のナビゲーションコントローラーのバックボタンを押して、[マップに戻る]をクリックすると、ユーザーの現在の場所にズームインしなくなりましたが、完全なズームアウトデフォルトがあります。
viewdidappearメソッドでDidupdateUserlocationを何らかの形で呼ぶことができれば正しく機能すると思いますが、DidupdateUserlocationはデリゲートメソッドであるため、これをどのように引き出すかはわかりません。
それは正しいアプローチですか、それともこれを行うために私がとるべき別のアプローチがありますか?ありがとう!
解決
私はすべてのズームコードをそれ自体のメソッドに引き込みます。 -viewDidAppear:
と -mapView:didUpdateToUserLocation:
.
- (void)zoomToUserLocation:(MKUserLocation *)userLocation
{
if (!userLocation)
return;
MKCoordinateRegion region;
region.center = userLocation.location.coordinate;
region.span = MKCoordinateSpanMake(2.0, 2.0); //Zoom distance
region = [self.mapView regionThatFits:region];
[self.mapView setRegion:region animated:YES];
}
その後 -viewDidAppear:
...
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[self zoomToUserLocation:self.mapView.userLocation];
}
とで -mapView:didUpdateToUserLocation:
委任方法...
- (void)mapView:(MKMapView *)theMapView didUpdateToUserLocation:(MKUserLocation *)location
{
[self zoomToUserLocation:location];
}
所属していません StackOverflow