我在基于标签栏的应用程序中将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上方导航控制器上的后退按钮,然后单击返回地图时,它不再放大用户的当前位置,而只是完全缩小默认值:
Here's a picture of the view the second time.
我认为如果我可以在viewDidAppear方法中以某种方式调用didUpdateUserLocation,它会正常工作,但我不知道如何将其关闭,因为didUpdateUserLocation是委托方法。
这是正确的方法还是我应采取不同的方法来做到这一点?谢谢!
P.S。 I've seen this question but it's slightly different with it's use of a modal view controller
答案 0 :(得分: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];
}