В didUpdateUserLocation:
вы позвонили setRegion:animated:
, что изменит видимую область на ваше текущее местоположение, и потому что вы не двигались.Затем вы закончили блокировку.
Вы можете рассмотреть следующий подход (не тест):
Сначала определите флаг состояния панорамирования
BOOL isMapPanning;
Инициируйте жест панорамированияраспознаватель с целью, указывающей на ваше представление
panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanGesture:)];
[EventsmapMapView addGestureRecognizer:panGesture];
и обработчик жестов
-(void)handlePanGesture:(UIPanGestureRecognizer*)sender {
switch (sender.state) {
case UIGestureRecognizerStateBegan:
// Stop map updating...
isMapPanning = YES;
break;
case UIGestureRecognizerStateChanged:
break;
case UIGestureRecognizerStateEnded:
// ... until panning is stop
isMapPanning = NO;
break;
default:
break;
}
}
Теперь, когда CLLocationManager
вызывает вашего делегата didUpdateUserLocation
, просто проверьте флаг панорамирования перед выполнениемвсе вещи.
-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{
if (!isMapPanning) {
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(userLocation.coordinate, 5000, 5000);
[self.EventsmapMapView setRegion:[self.EventsmapMapView regionThatFits:region] animated:YES];
}
}