1

MKPolyline と、0,0 の CLLocationCoordinate2D と MKMapRectWorld の境界矩形を持つオーバーレイとして単純に定義された MKOverlay のサブクラスです。

ユーザーの操作に応じて、MKPolyline オーバーレイとカスタム オーバーレイを最初に追加しようとしています。カスタム オーバーレイは、MKPolyline オーバーレイの下に配置する必要があります。

カスタム オーバーレイを次のように追加します。

[map insertOverlay:customOverlay atIndex:0];

しかし、うまくいきません。cusomOverlay は、既存のものの上に追加されます。ただし、 MKMapView のオーバーレイ配列は、それらが正しく順序付けられていると主張しています。

正しい順序を強制する唯一の方法は、MKPolyline を削除し、カスタム オーバーレイを追加してから、MKPolyline を元に戻すことです。

明らかな何かが欠けていますか?

編集コード スニペット:

カスタム オーバーレイ クラス:

@interface TransparencyOverlay : NSObject <MKOverlay>
{}
@end

@implementation TransparencyOverlay

- (CLLocationCoordinate2D)coordinate
{
    return CLLocationCoordinate2DMake(0, 0);
}

- (MKMapRect)boundingMapRect
{
    return MKMapRectWorld;
}

@end

カスタム オーバーレイの追加:

- (void)onUserAction
{
    transparencyOverlay_ = [TransparencyOverlay new];
    [context_.map insertOverlay:transparencyOverlay_ atIndex:0];
}

オーバーレイ ビューのコールバック:

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay
{
    // if overlay is MKOverlay return a MKPolylineView
    // the construction of that view is kind of complex and can't fit in here
    // else:

    CLLocationCoordinate2D coords[4] = {CLLocationCoordinate2DMake(89, 180),
                                    CLLocationCoordinate2DMake(89, -180),
                                    CLLocationCoordinate2DMake(-89, -180),
                                    CLLocationCoordinate2DMake(-89, 180)};
    MKPolygon *poly = [MKPolygon polygonWithCoordinates:coords count:4];
    MKPolygonView *view = [[MKPolygonView alloc] initWithPolygon:poly];
    view.fillColor = some color

    return [view autorelease];
}

MKPolyline は、viewDidLoad のオーバーレイとして追加されます (これもコードが多すぎて、ここにリストすることはできません)。

4

1 に答える 1

0

insertOverlay:aboveOverlay: および nsertOverlay:belowOverlay: メソッドを試しましたか?

于 2011-04-11T14:30:26.420 に答える