、AppleはまたMKMapViewDelegateで新しいコールバック紹介:
func mapView(_ mapView: MKMapView, clusterAnnotationForMemberAnnotations memberAnnotations: [MKAnnotation]) -> MKClusterAnnotation
を注釈は、クラスタ化になる前に、この関数は次のようになりますmemberAnnotations
の場合はMKClusterAnnotation
を請求するように呼び出しました。したがって、memberAnnotations
という2番目のパラメータは、クラスタ化される注釈を示します。
EDIT(2018年4月1日):
クラスタ注釈のための2つの重要なステップがあります。
まず、クラスタ化になるの注釈の前に、memberAnnotations
ためMKClusterAnnotationを要求するmapView:clusterAnnotationForMemberAnnotations:
関数を呼び出しMapKit。
第2に、MapKitはMKMapViewにMKClusterAnnotationを追加し、mapView:viewForAnnotation:
関数を呼び出してMKAnnotationViewを生成します。
ですから、このように、2つの段階のいずれかで注釈を選択解除することができます
var selectedAnnotation: MKAnnotation? //the selected annotation
func mapView(_ mapView: MKMapView, clusterAnnotationForMemberAnnotations memberAnnotations: [MKAnnotation]) -> MKClusterAnnotation {
for annotation in memberAnnotations {
if annotation === selectedAnnotation {
mapView.deselectAnnotation(selectedAnnotation, animated: false)//Or remove the callout
}
}
//...
}
または:
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
if let clusterAnnotation = annotation as? MKClusterAnnotation {
for annotation in clusterAnnotation.memberAnnotations {
if annotation === selectedAnnotation {
mapView.deselectAnnotation(selectedAnnotation, animated: false)//Or remove the callout
}
}
}
//...
}
ありがとう、私は知らなかった。私はちょうど選択された注釈だけを取得する方法に立ち往生しています。選択した注釈をクラスター化したとき(この1つだけ) –
@SeikiKisekashの選択を解除したい場合は、問題の答えを更新します。 – devliubo
お返事ありがとうございました!私が使用: にfuncのMapView(_のMapView:MKMapView、clusterAnnotationForMemberAnnotationsのmemberAnnotations:[MKAnnotation]) - > MKClusterAnnotation は今、私は新しい問題に直面し、私のアプリで作業を続けることができません。 注釈をズームイン/ズームアウトすると、アプリがクラッシュします。 私はこの問題を解決しようとしました:https://forums.developer.apple.com/thread/89427 そして、私の問題は次のものと同じです:https://openradar.appspot.com/36131654 確かに、問題は、選択解除に関連していないが、私はまだ立ち往生しています。 –