Если вы хотите увеличить только один раз, вы можете, например, добавить логический ivar с именем didZoomToUserLocation.
В viewDidLoad
инициализируйте его как NO перед вызовом startUpdatingLocation
:
didZoomToUserLocation = NO;
[locationManager startUpdatingLocation];
Затем в didUpdateToLocation
измените код следующим образом:
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{
location = newLocation.coordinate;
if (didZoomToUserLocation)
return;
didZoomToUserLocation = YES;
MKCoordinateRegion region;
region.center = location;
MKCoordinateSpan span;
span.latitudeDelta = .005;
span.longitudeDelta = .005;
region.span = span;
[mapView setRegion:region animated:TRUE];
}
Обратите внимание, что это также прекратит следить за пользователем на карте (но местоположение ivar все равно будет обновлено).
Если вы хотите следить за пользователем, но увеличивать масштаб только в первый раз, сделайте это вместо:
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{
location = newLocation.coordinate;
if (didZoomToUserLocation)
{
//just re-center map on user's location without changing zoom...
[mapView setCenterCoordinate:newLocation.coordinate animated:YES];
}
else
{
didZoomToUserLocation = YES;
MKCoordinateRegion region;
region.center = location;
MKCoordinateSpan span;
span.latitudeDelta = .005;
span.longitudeDelta = .005;
region.span = span;
[mapView setRegion:region animated:TRUE];
}
}
Кроме того, в вашем viewDidLoad вам не нужно вызывать insertSubview для mapView, если он создан в IB.