2012-01-30 3 views
6

У меня есть наложение на карте, и я хотел бы изменить его координаты. Чтобы сделать это легко, я собираюсь вызвать метод setNeedsDisplayInMapRect: после того, как изменение было внесено в представление.Изменить координату MKOverlay для MKOverlayView

Я проверил на это, только изменяя FillColor и она отлично работает:

overlayView.fillColor = [[UIColor greenColor] colorWithAlphaComponent:0.3]; 
[overlayView setNeedsDisplayInMapRect:mapView.visibleMapRect]; 

Однако я, казалось бы, врезался в кирпичную стену, пытаясь также изменить координаты центра с моей точки зрения наложения (который a MKCircleView с MKCircle). Существует метод в MKAnnotation, который соответствует MKCircle, который называется setCoordinate:, - который кажется мне необходимым. К сожалению, однако, свойство circle в MKCircleView - только для чтения. Кроме того, свойство overlay в MKOverlayView также доступно только для чтения.

Есть ли способ изменить координаты для наложения, не прибегая к удалению оверлейного вида и добавлению нового (что вызовет очень заметное мерцание на экране.)?

+0

У меня был аналогичный проблемный взгляд MKPolyline. В моем случае линия всегда становится длиннее, поэтому я всегда рисую две полилинии, а затем удаляю старую. Таким образом, более длинная строка скрывает мерцание. – theaob

ответ

0

такая же проблема возникает здесь, поэтому я создаю множество методов и называю это в соответствии с требованиями.

-(void)removeAllAnnotationFromMapView{ 
    if ([[self.tmpMapView annotations] count]) { 
     [self.tmpMapView removeAnnotations:[self.tmpMapView annotations]]; 
    } 
} 
-(void)removeAllOverlays{ 
    if ([[self.tmpMapView overlays] count]) { 
     [self.tmpMapView removeOverlays:[self.tmpMapView overlays]]; 
    } 
} 

-(void)removeOverlayWithTag:(int)tagValue{ 
    for (MKOverlayView *oView in [self.tmpMapView overlays]) { 
     if (oView.tag == tagValue) { 
      [self.tmpMapView removeOverlay:oView]; 
     } 
    } 
} 
Смежные вопросы