La respuesta de Jano funcionó para mí, así que pensé en dejar una versión actualizada para Swift 4 / XCode 9 ya que no soy particularmente competente en Objective C y estoy seguro de que hay algunos otros que tampoco lo son.
Paso 1: agregue este código en viewDidLoad:
let panGesture = UIPanGestureRecognizer(target: self, action: #selector(didDragMap(_:)))
panGesture.delegate = self
Paso 2: asegúrese de que su clase se ajuste a UIGestureRecognizerDelegate:
class MapViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate, UIGestureRecognizerDelegate {
Paso 3: agregue la siguiente función para asegurarse de que su panGesture funcione simultáneamente con otros gestos:
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
Paso 4: Asegúrate de que tu método no se llame "50 veces por arrastre" como señala Jano correctamente:
@objc func didDragMap(_ gestureRecognizer: UIPanGestureRecognizer) {
if (gestureRecognizer.state == UIGestureRecognizerState.ended) {
redoSearchButton.isHidden = false
resetLocationButton.isHidden = false
}
}
* Tenga en cuenta la adición de @objc en el último paso. XCode forzará este prefijo en su función para que se compile.
- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated
hizo el trabajo.