MKMapView在标签栏应用程序(iOS)中放大用户的位置一次,但不是第二次



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

我点击第一个视图控制器上的UIButton,它推送到包含MKMapView的第二个视图控制器。当地图视图加载时,它使用

放大用户的位置
- (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];
}

相关内容

  • 没有找到相关文章

最新更新