MKOverlay проблемы с заказом - PullRequest
1 голос
/ 11 апреля 2011

У меня есть MKMapView с двумя наложениями: MKPolyline и подклассом MKOverlay, который просто определяется как наложение с CLLocationCoordinate2D, равным 0,0, и ограничивающим прямоугольником MKMapRectWorld.

Я пытаюсь изначальнодобавьте оверлей 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 (опять же, здесь слишком много кода для перечисления).

1 Ответ

0 голосов
/ 11 апреля 2011

Вы пытались использовать методы insertOverlay: aboveOverlay: и nsertOverlay: underOverlay: методы?

...