ios – 如何在MapView中将缩放级别设置为用户位置

我使用MKMapView获取用户位置,当视图加载时,它显示整个世界视图.无论如何我可以设置缩放级别,这样用户就不必一直放大以获得城市景观或街景……这将是一个很大的帮助.我在下面发布了我的代码以供参考……

- (void)viewDidLoad
{

    [super viewDidLoad];
    [ self.mapView.delegate self];
    [self.mapView setShowsUserLocation:YES];
    // Do any additional setup after loading the view, typically from a nib.
}
-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{

    CLLocationCoordinate2D loc = [userLocation coordinate];
    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(loc, 500, 500);
    [self.mapView setRegion:region animated:YES];


    }
- (void)viewDidUnload {
    [super viewDidUnload];
    [_mapView setShowsUserLocation:NO];
}

最佳答案 除了viewDidLoad中的这个关键行之外,您发布的代码应该大部分工作:

[ self.mapView.delegate self];

从本质上讲,这条线没有任何作用.
它没有设置地图视图的委托属性(这是我认为它应该做的).

它实际上做的是在委托属性上调用self.

地图视图的委托未设置(它保持为零),因此绝不会调用didUpdateUserLocation委托方法,因此地图不会缩放到用户的位置.

这条线应该是这样的:

[self.mapView setDelegate:self];

甚至更简单:

self.mapView.delegate = self;

请注意,在iOS 5或更高版本中,您只需设置userTrackingMode,地图视图将自动缩放并跟随用户的位置,因此您无需手动执行此操作.

另请注意,自iOS 6起,viewDidUnload已弃用,甚至不被操作系统调用.您可能希望将showsUserLocation的禁用移至viewWillDisappear(并将启用移至viewWillAppear).

点赞