理論的には、あなたは注釈ビューのフレームを取得し、それはマップビューのエッジに近すぎるのですかどうかを確認することができます
func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
// if view.frame is too close to the edges of the MKMapView, triggered your desired method
}
実際には、アノテーションビューのコールアウトバブルにも依存するため、これは信頼性がありません。コールアウトバブルのサイズに応じて、「端に近すぎる」基準には異なるしきい値が必要です。簡単な方法はありません。
これは少しハッキリです:画面が調整されたら、regionWillChangeAnimated
メソッドが呼び出されます。それは、注釈を叩くのスプリット秒以内にトリガされた場合は、注釈をタップし、ユーザーによって引き起こされたことを良いチャンスがあります:
weak var tappedAnnotationView: MKAnnotationView?
func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
self.tappedAnnotationView = view // this property will only be non-nil for 0.1 seconds
DispatchQueue.global().asyncAfter(deadline: .now() + 0.1) {
self.tappedAnnotationView = nil
}
}
func mapView(_ mapView: MKMapView, regionWillChangeAnimated animated: Bool) {
if self.tappedAnnotationView != nil {
print("map adjusted due to tap on an annotation view")
}
}
それは私がそれを投げた基本的なテストのために動作しますが、明らかにそこにそれがハックだから故障する極端な場合になります。私が思い付いた何
お返事いただきありがとうございます。それは有り難いです。 –