9

mk* 関数の外で使用できるコードが必要です。カスタム関数を実行して、配列内の FIRST マーカーと LAST マーカーを前面に表示する必要があります。(画面上の他のすべてのマーカーの上にあるので)。私が試してみました

[self.view bringSubviewToFront:[[mapView annotations]objectAtIndex: 0]];

コードで使用[[mapView annotations]objectAtIndex: 0]しましたが、これは機能しますが、これを前面に表示しようとするとクラッシュします。間違ったレイヤーなどにアクセスしていますか?

助けてくれてありがとう。

4

3 に答える 3

13

間違ったことを前面に押し出しています。つまり、annotations配列はMKAnnotationプロトコルに準拠するオブジェクトの配列 ( type id<MKAnnotation>) であり、ビューではありません。

代わりに、必要な注釈のビューを取得し、それらを前面に表示する必要があります。

id<MKAnnotation> annotation = [[mapView annotations] objectAtIndex:0];
MKAnnotationView* annotationView = [mapView viewForAnnotation:annotation];
if (annotationView != nil) {
    [annotationView.superview bringSubviewToFront:annotationView];
}

ただし、いくつかの点に注意する必要があります。

  1. annotationViewnil注釈が画面外のポイントにある場合、または注釈のマップへの追加が完了していない場合があります。ただし、 であればnil、画面上にさえない注釈が前面にあるかどうかはおそらく気にしません。
  2. どちらも のスーパービューではないため、またはではなくbringSubviewToFrontannotationViewのスーパービューを呼び出す必要があります。self.viewmapViewannotationView
于 2010-09-15T08:26:18.237 に答える
1

これは私にとってはるかにうまくいきました:

アノテーション ビュー レイヤーの zPosition (annotationView.layer.zPosition) を次の場所に設定します。

- (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation
{
    // if it's the user location, just return nil.
    if ([annotation isKindOfClass:[MKUserLocation class]])
        return nil;

    MKAnnotationView *returnedAnnotationView = nil;
    returnedAnnotationView = [CUSTOMVIEW createViewAnnotationForMapView:self.mapView annotation:annotation];
    // SOME CUSTOM PROCESSING...
    returnedAnnotationView.layer.zPosition = 3;
    return returnedAnnotationView;
}

デフォルトの zPosition が 0 であると想定していることに注意してください。3 に設定すると、3 つのマーカーすべてが一番上に表示されます。

于 2016-03-30T00:14:48.367 に答える