3

5000 以上のピンを持つマップに取り組んでいます。領域を変更するたびに、ズームの程度に基づいてannotationViewsを追加または削除します。

唯一の問題はこれです(極端なテスト):

生きたまま食べられる吹き出し

ピン間のスペースがほとんどない場合、コールアウトは上に移動しますが、赤いピンが上にあることがよくあります。
基本的な MKPinAnnotationView のみを使用しています。カスタム コールアウトはありません。MKAnnotationViews のAaron Z-ordering による Z-ordering-category の実装を試みましたが、役に立たなかったようです。

編集:

まだ解決していませんが、少し気になることがあります。

MapKit の記述が不十分です。MapView にはビューを並べ替える責任があるため、少なくとも選択したビューが一番上に表示されます。

おそらく、mapView が処理するには注釈が多すぎます。

複製方法

5000 の注釈を追加するだけです。

-(void)addAnnotations
{
   NSMutableArray *annotations = [NSMutableArray array];

   for(int i=0;i<5000;i++) {
       CGFloat latDelta = rand()*0.125/RAND_MAX - 0.02;
       CGFloat lonDelta = rand()*0.130/RAND_MAX - 0.08;

       CGFloat lat = 59.189358;
       CGFloat lng = 18.267839;

       CLLocationCoordinate2D newCoord = {lat+latDelta, lng+lonDelta};

       DTSAnnotation *annotation = [DTSAnnotation annotationWithCoord:newCoord];

       [annotation setTitle:@"."];

       [annotations addObject:annotation];
   }
   [[self mapView]addAnnotations:annotations];
}
4

1 に答える 1

3

これを修正するには、didSelect および didDselect マップ ビュー デリゲート メソッドでビューの zPosition を設定します。

public func mapView(mapView: MKMapView!, didSelectAnnotationView view: MKAnnotationView!)
    {
        view.layer.zPosition = 0
    }

    public func mapView(mapView: MKMapView!, didDeselectAnnotationView view: MKAnnotationView!)
    {
        view.layer.zPosition = -1
    }
于 2015-07-17T16:24:04.933 に答える