Ответ Яно сработал для меня, поэтому я решил оставить обновленную версию для 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 навязывает этот префикс вашей функции для ее компиляции.