Der Code in der akzeptierten Antwort wird ausgelöst, wenn der Bereich aus irgendeinem Grund geändert wird. Um ein Ziehen der Karte richtig zu erkennen, müssen Sie einen UIPanGestureRecognizer hinzufügen. Dies ist übrigens der Erkenner der Ziehgesten (Schwenken = Ziehen).
Schritt 1: Fügen Sie den Gestenerkenner in viewDidLoad hinzu:
-(void) viewDidLoad {
[super viewDidLoad];
UIPanGestureRecognizer* panRec = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(didDragMap:)];
[panRec setDelegate:self];
[self.mapView addGestureRecognizer:panRec];
}
Schritt 2: Fügen Sie das Protokoll UIGestureRecognizerDelegate zum View-Controller hinzu, damit es als Delegat funktioniert.
@interface MapVC : UIViewController <UIGestureRecognizerDelegate, ...>
Schritt 3: Und fügen Sie den folgenden Code für den UIPanGestureRecognizer hinzu, um mit den bereits vorhandenen Gestenerkennern in MKMapView zu arbeiten:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return YES;
}
Schritt 4: Wenn Sie Ihre Methode nur einmal statt 50 Mal pro Ziehen aufrufen möchten, erkennen Sie den Zustand "Ziehen beendet" in Ihrem Selektor:
- (void)didDragMap:(UIGestureRecognizer*)gestureRecognizer {
if (gestureRecognizer.state == UIGestureRecognizerStateEnded){
NSLog(@"drag ended");
}
}