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 のオーバーレイとして追加されます (これもコードが多すぎて、ここにリストすることはできません)。