mkmapviewタブバーアプリ(iOS)で2回目ではなく、ユーザーの位置を1回ズームインしますが

StackOverflow https://stackoverflow.com/questions/8347607

質問

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の上のナビゲーションコントローラーのバックボタンを押して、[マップに戻る]をクリックすると、ユーザーの現在の場所にズームインしなくなりましたが、完全なズームアウトデフォルトがあります。

これが2回目のビューの写真です。

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];
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top