Ответ Яно сработал для меня, поэтому я подумал, что оставлю обновленную версию для Swift 4 / XCode 9, поскольку я не особенно разбираюсь в Objective C, и я уверен, что есть несколько других, которых тоже нет.
Шаг 1. Добавьте этот код в viewDidLoad:
let panGesture = UIPanGestureRecognizer(target: self, action: #selector(didDragMap(_:)))
panGesture.delegate = self
Шаг 2. Убедитесь, что ваш класс соответствует UIGestureRecognizerDelegate:
class MapViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate, UIGestureRecognizerDelegate {
Шаг 3: Добавьте следующую функцию, чтобы ваш panGesture работал одновременно с другими жестами:
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
Шаг 4: И убедитесь, что ваш метод не называется «50 раз за перетаскивание», как правильно указывает Яно:
@objc func didDragMap(_ gestureRecognizer: UIPanGestureRecognizer) {
if (gestureRecognizer.state == UIGestureRecognizerState.ended) {
redoSearchButton.isHidden = false
resetLocationButton.isHidden = false
}
}
* Обратите внимание на добавление @objc на последнем шаге. XCode принудительно установит этот префикс в вашей функции, чтобы она скомпилировалась.
- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated
сделал свою работу.