Когда вы делаете mapView.showsUserLocation = YES;
, вы запрашиваете его, чтобы получить местоположение пользователя.Это не происходит мгновенно.Поскольку для этого требуется время, представление карты уведомляет своего делегата о том, что местоположение пользователя доступно с помощью метода делегата mapView:didUpdateUserLocation
.Поэтому вы должны принять протокол MKMapViewDelegate
и реализовать этот метод.Вы должны переместить весь свой код увеличения в этот метод.
Установка делегата
- (void)viewDidLoad {
[super viewDidLoad];
mapView = [[MKMapView alloc]
initWithFrame:CGRectMake(0,
0,
self.view.bounds.size.width,
self.view.bounds.size.height)
];
mapView.showsUserLocation = YES;
mapView.mapType = MKMapTypeHybrid;
mapView.delegate = self;
[self.view addSubview:mapView];
}
Обновленный метод делегата
- (void)mapView:(MKMapView *)aMapView didUpdateUserLocation:(MKUserLocation *)aUserLocation {
MKCoordinateRegion region;
MKCoordinateSpan span;
span.latitudeDelta = 0.005;
span.longitudeDelta = 0.005;
CLLocationCoordinate2D location;
location.latitude = aUserLocation.coordinate.latitude;
location.longitude = aUserLocation.coordinate.longitude;
region.span = span;
region.center = location;
[aMapView setRegion:region animated:YES];
}