iOS用アプリケーションの開発途中にあり、マップビューでカスタムアノテーションの問題が発生しました。ここで注釈の追加/削除時の奇妙なカスタムアノテーションの動作
はアイデアです:
1)私は、私が関心のあるすべての近くのポイントを取得するために私のバックエンドサーバーに要求を送信し、この場所から、マップにユーザーの場所にロードします。
2)以下のように私は、カスタムアノテーションを持っている:
class CustomPointAnnotation: MKPointAnnotation {
var imageName: String?
var activeImageName : String?
var trainCrossingId : Int?
var notificationCount : UILabel = UILabel()
var labelIsHidden : Bool = true
}
私はマップ上に注釈を追加するとき、私は動的に私は私のFirebaseデータベースから取得したデータを使用するようにnotificationCount
ラベルを設定しています。
3)ユーザーは、現在の位置を中心に半径のサイズを増減できます。この新しい半径を選択して、mapView.removeAnnotations(mapView.annotations)
を使用してすべての注釈を削除し、選択した半径を使用してサーバーから取得した新しいデータでこれらの注釈を再追加します。
問題:最初のビューをロードするときに設定正しいラベルと予想されるように、注釈等
作業している
しかし、一度ユーザが半径を更新し、Iは、追加/削除注釈とそれに対応するラベルが期待通りに表示されません。
例えばが、これは、マップが最初に視界に入ったときにどのように見えるかです:
予想されるデータを最初の画像に表示されているもの(最初にビューに入ったとき)ですが、半径が更新されると、注釈のZ値は尊重されず、notificationCount
は正しくありません(たとえば、ラベルを持たない)。これは私がfunc mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {...}
の各注釈を監視するために印刷ステートメントとブレークポイントを設定していて、値が正しいと思いますが、ビューにはこれらの値が表示されていないので変です。
ここで間違っている可能性のあるアイデアはありますか?前もって感謝します!
編集には、以下のMapViewデリゲートを含めます
// Custom annotation view
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
if !(annotation is CustomPointAnnotation) {
return nil
}
let reuseId = "trainPin"
var anView = mapView.dequeueReusableAnnotationView(withIdentifier: reuseId)
if anView == nil {
anView = MKAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
}
else {
anView?.annotation = annotation
}
let cpa = annotation as! CustomPointAnnotation
let icon : UIImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 32, height: 32))
icon.image = UIImage(named:cpa.imageName)
icon.layer.zPosition = 1
anView?.rightCalloutAccessoryView = cpa.annotationButton
anView?.addSubview(cpa.notificationCount)
anView?.addSubview(icon)
anView?.frame = CGRect(x: 0, y:0, width:32, height:32)
anView?.canShowCallout = true
return anView
}
あなたは' FUNCののMapView(MKAnnotation:MKMapView、viewFor注釈_のMapView)のためにあなたのコードを投稿することができます:再び追加し、最初のサブビューを削除するようにしてください? – chengsam
もちろん、元の質問に追加するように編集しました。ありがとう@chengsam – Dayna