2013-12-18 5 views
0

Я пытаюсь добавить наложение многоугольника на карту MKMapKit. Карта появляется, но полигон не ... Я пропустил что-то очевидное?Оверлей не отображается на карте

код прилагается:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.mapView.showsPointsOfInterest = NO; 

    CLLocationCoordinate2D worldCoords[4] = { {43,-100}, {43,-80}, {25,-80}, {25,-100} }; 
    MKPolygon *worldOverlay = [MKPolygon polygonWithCoordinates:worldCoords count:4]; 

    [self.mapView addOverlay:worldOverlay level:MKOverlayLevelAboveRoads]; 
} 

А класс Renderer ...

- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay 
{ 
    if (![overlay isKindOfClass:[MKPolygon class]]) { 
     return nil; 
    } 
    MKPolygon *polygon = (MKPolygon *)overlay; 
    MKPolygonRenderer *renderer = [[MKPolygonRenderer alloc] initWithPolygon:polygon]; 
    renderer.fillColor = [[UIColor darkGrayColor] colorWithAlphaComponent:0.4]; 
    return renderer; 
} 

Любая помощь будет оценен по достоинству!

Благодаря Guy

+0

ли вид карты в Делегат набор/подключен? – Anna

+0

Привет Анна - да, это – guyh92

+0

После вызова addOverlay поместите 'NSLog (@" mapView =% @, количество наложений =% d ", self.mapView, self.mapView.overlays.count);' и посмотреть, что он говорит , Также поставьте NSLog или точку останова в методе rendererForOverlay, чтобы узнать, вызвано ли оно вызовом. Вопрос говорит «и класс Renderer ...». Означает ли это, что метод rendererForOverlay не находится в том же классе, что и viewDidLoad, или вы имели в виду «и метод Renderer»? – Anna

ответ

-2

я наткнулся на ответ!

После того, как помощь Анны в комментариях помогла мне получить слой, работая - казалось, что вы должны инициировать mapView после добавления слоя. поэтому после

[self.mapView addOverlay:worldOverlay level:MKOverlayLevelAboveRoads]; 

вам нужно

mapView = [[MKMapView alloc] initWithFrame:self.view.bounds]; 
+2

Это не имеет никакого смысла. Если вы повторно инициализируете mapView, он не будет связан с добавленным вами дополнением. Однако это не имеет значения, если mapView вы повторно инициализируете не тот, который связан с фактическим представлением. Я предлагаю вам попробовать прокомментировать свою вторую строку, и вы обнаружите, что она работает нормально, либо это, либо они не вызываются в том порядке, в котором вы думаете. – Craig

+0

Хм - ты прав. Комментирование строки initWithFrame все еще работает. Тем не менее, если я перемещаю эту строку над линией addOverlay, это не так. Я сейчас смущен! – guyh92

+0

Если вы повторно настроили mapView, вы создали новый, который не является тем, что на экране, поэтому вы добавляете наложение к карте, которую вы не видите. Если вы добавите оверлей к тому, который подключен к экрану, а затем создайте новый и укажите переменную «mapview» в этом, он не удалит оверлеи, добавленные в первый. Это суть утечек памяти. Если вы несколько раз выполнили строку 'initWithFrame', вы бы загрузили MKMapViews, но только один был бы подключен к mapView переменной – Craig

Смежные вопросы