Janos Antwort hat bei mir funktioniert, daher dachte ich, ich würde eine aktualisierte Version für Swift 4 / XCode 9 hinterlassen, da ich Ziel C nicht besonders gut beherrsche und ich bin sicher, dass es einige andere gibt, die dies auch nicht sind.
Schritt 1: Fügen Sie diesen Code in viewDidLoad hinzu:
let panGesture = UIPanGestureRecognizer(target: self, action: #selector(didDragMap(_:)))
panGesture.delegate = self
Schritt 2: Stellen Sie sicher, dass Ihre Klasse dem UIGestureRecognizerDelegate entspricht:
class MapViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate, UIGestureRecognizerDelegate {
Schritt 3: Fügen Sie die folgende Funktion hinzu, um sicherzustellen, dass Ihre panGesture gleichzeitig mit anderen Gesten funktioniert:
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
Schritt 4: Und stellen Sie sicher, dass Ihre Methode nicht "50 Mal pro Drag" genannt wird, wie Jano zu Recht betont:
@objc func didDragMap(_ gestureRecognizer: UIPanGestureRecognizer) {
if (gestureRecognizer.state == UIGestureRecognizerState.ended) {
redoSearchButton.isHidden = false
resetLocationButton.isHidden = false
}
}
* Beachten Sie das Hinzufügen von @objc im letzten Schritt. XCode erzwingt dieses Präfix für Ihre Funktion, damit es kompiliert werden kann.
- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated
hat den Job gemacht.