MKMapKit の制限にかなり不満を感じています。私の現在の問題は、特にタッチに関連する注釈ビューの z オーダーに関係しています。デフォルトの z オーダーを受け入れると、マップキットは次のように表示します。
- 順番はランダムに表示されます。z オーダーは、注釈が追加された順序とは無関係です。
- 1 つの注釈が別の注釈の上に重なってしまう場合、通常、上部の注釈をタッチすると、下部の注釈の吹き出しが表示されます。ヒット検出が描画順序を尊重していないようです。どうしたの?
Web で見つかった次のコードに似たものを使用して #1 を解決しようとしました (これは、z オーダーをある程度制御できるように設計されています)。
- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views { for (MKAnnotationView * annView in views) { TopBottomAnnotation * ann = (TopBottomAnnotation *) [annView 注釈]; if ([アントップ]) { [[annView スーパービュー] BringSubviewToFront:annView]; } そうしないと { [[annView スーパービュー] sendSubviewToBack:annView]; } } }
mapView:didAddAnnotationViews: に渡された注釈ビューを実行し、それらの z オーダーを調整すると、#1 が修正されるようです。問題は、吹き出しビューが常に注釈ビューの上に表示されなくなったことです。MapKit は、レイヤーについて非常に混乱しているようです (コールアウトは、すべての注釈ビューの上のレイヤーに描画する必要があります)。受信したすべての MKAnnotationView が同じスーパービュー (プライベート クラス MKOverlayView) を持っているため、どのように混乱しているのかを理解することさえできます。妥当な設計であれば、このオーバーレイ ビューに関するコールアウトを描画すると考えるでしょう。
#1 または #2 をうまく解決した人はいますか?