La risposta di Jano ha funzionato per me, quindi ho pensato di lasciare una versione aggiornata per Swift 4 / XCode 9 poiché non sono particolarmente esperto in Objective C e sono sicuro che ce ne sono alcuni altri che non lo sono.
Passaggio 1: aggiungi questo codice in viewDidLoad:
let panGesture = UIPanGestureRecognizer(target: self, action: #selector(didDragMap(_:)))
panGesture.delegate = self
Passaggio 2: assicurati che la tua classe sia conforme a UIGestureRecognizerDelegate:
class MapViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate, UIGestureRecognizerDelegate {
Passaggio 3: aggiungi la seguente funzione per assicurarti che panGesture funzioni contemporaneamente ad altri gesti:
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
Passaggio 4: assicurandoti che il tuo metodo non sia chiamato "50 volte per trascinamento", come giustamente sottolinea Jano:
@objc func didDragMap(_ gestureRecognizer: UIPanGestureRecognizer) {
if (gestureRecognizer.state == UIGestureRecognizerState.ended) {
redoSearchButton.isHidden = false
resetLocationButton.isHidden = false
}
}
* Nota l'aggiunta di @objc nell'ultimo passaggio. XCode forza questo prefisso sulla tua funzione per poterla compilare.
- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated
ha fatto il lavoro.