Відповідь Яно спрацювала для мене, тому я подумав залишити оновлену версію для Swift 4 / XCode 9, оскільки я не особливо володію ціллю 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
зробив роботу.