Câu trả lời của Jano phù hợp với tôi, vì vậy tôi nghĩ rằng tôi sẽ để lại một phiên bản cập nhật cho Swift 4 / XCode 9 vì tôi không đặc biệt thành thạo về Objective C và tôi chắc chắn rằng có một số người khác cũng vậy.
Bước 1: Thêm mã này vào viewDidLoad:
let panGesture = UIPanGestureRecognizer(target: self, action: #selector(didDragMap(_:)))
panGesture.delegate = self
Bước 2: Đảm bảo rằng lớp của bạn tuân thủ UIGestureRecognizerDelegate:
class MapViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate, UIGestureRecognizerDelegate {
Bước 3: Thêm chức năng sau để đảm bảo panGesture của bạn sẽ hoạt động đồng thời với các cử chỉ khác:
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
Bước 4: Và đảm bảo rằng phương pháp của bạn không được gọi là "50 lần mỗi lần kéo" như Jano đã chỉ ra đúng:
@objc func didDragMap(_ gestureRecognizer: UIPanGestureRecognizer) {
if (gestureRecognizer.state == UIGestureRecognizerState.ended) {
redoSearchButton.isHidden = false
resetLocationButton.isHidden = false
}
}
* Lưu ý thêm @objc ở bước cuối cùng. XCode sẽ buộc tiền tố này trên hàm của bạn để nó biên dịch.
- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated
đã làm công việc.