Odpowiedź Jano zadziałała dla mnie, więc pomyślałem, że zostawię zaktualizowaną wersję dla Swift 4 / XCode 9, ponieważ nie jestem szczególnie biegły w Celu C i jestem pewien, że jest kilka innych, które też nie są.
Krok 1: Dodaj ten kod w viewDidLoad:
let panGesture = UIPanGestureRecognizer(target: self, action: #selector(didDragMap(_:)))
panGesture.delegate = self
Krok 2. Upewnij się, że Twoja klasa jest zgodna z UIGestureRecognizerDelegate:
class MapViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate, UIGestureRecognizerDelegate {
Krok 3: Dodaj następującą funkcję, aby mieć pewność, że panGesture będzie działać jednocześnie z innymi gestami:
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
Krok 4: I upewnij się, że Twoja metoda nie nazywa się „50 razy na przeciągnięcie”, jak słusznie zauważa Jano:
@objc func didDragMap(_ gestureRecognizer: UIPanGestureRecognizer) {
if (gestureRecognizer.state == UIGestureRecognizerState.ended) {
redoSearchButton.isHidden = false
resetLocationButton.isHidden = false
}
}
* Zwróć uwagę na dodanie @objc w ostatnim kroku. XCode wymusi ten prefiks w twojej funkcji w celu jej kompilacji.
- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated
wykonał pracę.