Ответ 1
Из документации Apple:
Настройка режима отслеживания на MKUserTrackingModeFollow или MKUserTrackingModeFollowWithHeading вызывает отображение карты в центр карту в этом месте и начните отслеживать местоположение пользователей. Если карта будет уменьшена, отображение карты автоматически увеличит число пользователей местоположение, эффективно изменяя текущую видимую область.
Если вы хотите как настроить регион, так и отслеживать пользователя, я предлагаю вам проверить наличие обновлений местоположения и соответственно изменить масштаб.
Например:
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation {
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(userLocation.coordinate, 200.0f, 200.0f);
[self.mapView setRegion:region animated:YES];
}
ИЗМЕНИТЬ
Вместо настройки области попробуйте просто установить центр,
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation {
[self.mapView setCenterCoordinate:userLocation.location.coordinate animated:YES];
}
и пусть действие вашей кнопки устанавливает масштаб, сохраняя тот же центр:
- (IBAction)changeRegion:(id)sender {
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(self.mapView.centerCoordinate, 200.0f, 200.0f);
[self.mapView setRegion:region animated:YES];
}
И очень важно: не задавайте свой mapView для отслеживания пользователя. Отключите отслеживание пользователя, потому что теперь вы отслеживаете его самостоятельно. Я думаю, что по умолчанию это MKUserTrackingModeNone
.