Код в принятом ответе срабатывает при изменении региона по любой причине.Чтобы правильно определить перетаскивание карты, вы должны добавить UIPanGestureRecognizer.Кстати, это распознаватель жестов перетаскивания (панорамирование = перетаскивание).
Шаг 1: Добавление распознавателя жестов в viewDidLoad:
-(void) viewDidLoad {
[super viewDidLoad];
UIPanGestureRecognizer* panRec = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(didDragMap:)];
[panRec setDelegate:self];
[self.mapView addGestureRecognizer:panRec];
}
Шаг 2: Добавьте протокол UIGestureRecognizerDelegate в контроллер представления, чтобы он работал как делегат.
@interface MapVC : UIViewController <UIGestureRecognizerDelegate, ...>
Шаг 3: И добавьте следующий код для UIPanGestureRecognizer для работы с уже существующимраспознаватели жестов в MKMapView:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return YES;
}
Шаг 4: Если вы хотите вызывать свой метод один раз вместо 50 раз за перетаскивание, определите это состояние «завершение перетаскивания» в селекторе:
- (void)didDragMap:(UIGestureRecognizer*)gestureRecognizer {
if (gestureRecognizer.state == UIGestureRecognizerStateEnded){
NSLog(@"drag ended");
}
}