3

タブ バー ベースのアプリのナビゲーション コントローラーの一部として 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 はデリゲート メソッドであるため、これを実行する方法がわかりません。

それは正しいアプローチですか、それともこれを行うために取るべき別のアプローチはありますか? ありがとう!

PS私はこの質問を見てきましたが、モーダルView Controllerの使用とは少し異なります

4

1 に答える 1

11

-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];
}
于 2011-12-01T21:33:58.590 に答える