2012-01-06 11 views
0

マップビューを使用するアプリケーションを開発しましたが、同じ場所に複数の注釈がありますが、注文したピンを削除しません注釈。配列から注釈を追加しましたが、同じ順序が表示されていません。最初のオブジェクト[アノテーション]がその場所のトップになる必要があります。ユーザーがアノテーションをタップすると、最初のオブジェクトがコールアウトとして表示されます。同じことをするための提案。注釈は、私が提供した順序で地図ビューにドロップされていません

おかげ は、私はすでにこのアプローチを試してみましたが、運が...

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views { 


for (MKAnnotationView *view in views) { 

    if ([[view annotation] isKindOfClass:[Annotation class]]) { 
     Annotation *customAnnotation = (Annotation*) [view annotation]; 
     if ([customAnnotation markerID]==0) 
      [[view superview] bringSubviewToFront:view]; 
     else { 
      [[view superview] sendSubviewToBack:view]; 
     } 
    } 
} 
} 
+0

可能な複製http://stackoverflow.com/questions/1145238/how-to-define-the-order-of -overlapping-mkannotationviews/1213450#1213450 – Rayfleck

答えて

1

注釈は、任意の順序で添加していない置くことができ、同様の細胞が内にあるビューから追加または削除することができますテーブルビュー。だから、Zレイヤーはあなたが望まないかもしれない方法で変わることがあります。

ここでは、役立つサンプルコードを示します。私は、検索結果のピンを表示するマップを持っています。彼らは通常の結果とお気に入りに分かれています。私はお気に入りが常に上のピンまたは他のピンになるようにしたい。また、選択されたマップピンをハイライトする「レクティクル」もありますが、これは常にすべての注釈の上に表示されます。このコードを使用して、さまざまなタイプのアノテーションを適切なZレイヤーの順序に取得します。

- (void) mapView:(MKMapView *)aMapView didAddAnnotationViews:(NSArray *)views { 

    MKAnnotationView *theReticleView = nil; 

    for (MKAnnotationView *view in views) { 
     if ([[view annotation] isKindOfClass:[SearchResult class]]) { 
      SearchResult *result = (SearchResult*) [view annotation]; 
      if ([result.isFavorite boolValue]) { 
       [[view superview] bringSubviewToFront:view]; 
      } else { 
       [[view superview] sendSubviewToBack:view]; 
      } 
     } 
     else if ([[view annotation] isKindOfClass:[MapReticle class]]) { 
      theReticleView = view; 
     } 
    } 
    if (theReticleView != nil) 
     [[theReticleView superview] bringSubviewToFront:theReticleView]; 

} 
+0

こんにちはドラコ、お返事ありがとうございます、私はすでにこのアプローチを試みましたが、運はありません。コールアウトを取得するためにアノテーションをタップすると、アノテーションの最初のインデックス以外のものが表示されます。それは私に注釈の最初のインデックスを示すはずです。 [1つの場所、多くの注釈がある、現在表示されていない注釈をタップすると、先頭のものを表示する必要があります。] –