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