3

我有一个 MKMapView 作为基于标签栏的应用程序中导航控制器的一部分。

我单击第一个 View Controller 上的 UIButton,它会推送到包含 MKMapView 的第二个 View Controller。当地图视图加载时,它会使用以下方法放大用户的位置:

- (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 是委托方法,因此我不确定如何将其关闭。

这是正确的方法还是我应该采取不同的方法来做到这一点?谢谢!

PS我见过这个问题,但它使用模态视图控制器略有不同

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 回答