2010-07-22 3 views
8

есть способ обновления (то есть перемещения) MKOverlay, который уже добавлен в MKMapView. Удаление старого и добавление нового - ужасное (медленное).перемещение/обновление MKOverlay на MKMapView

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

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay 

MKAnnotions его немного лучше, я думаю, но я не могу использовать MKPolyline, MKPolygon и т.п., и вся информация сводится к одной точке)

+0

дополнение: чтобы создать впечатление, когда мне нужна эта функция: Я использую MapView и размещаю аннотации поверх нее, чтобы показать положение спутников. Каждый спутник должен также отображать след (область, где вы можете «видеть» спутник над горизонтом). Эта информация (позиция и форма отпечатка) должна периодически обновляться. В Момент у меня есть решение с одним представлением vor all Footprints, где я рисую с CoreGraphics правильными фигурами. Но я бы предпочел решение с MKOverlay, но я не могу получить их динамическими ... любые идеи? – user398877

ответ

4

MKOverlayView имеет следующие методы, которые заставляют MapKit, чтобы вновь сделать данную mapRect:

- (void)setNeedsDisplayInMapRect:(MKMapRect)mapRect

- (void)setNeedsDisplayInMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale

Если вы используете таймер (или периодический запрос HTTP или какой-то другой метод для определения того, что ваш оверлей должен быть обновлен), позвонив по одному из указанных выше способов на OverlayView вызовет он повторно отображает это пятно на карте (т. е. -canDrawMapRect:zoomScale: будет вызываться снова, а затем будет вызываться -drawMapRect:zoomScale:inContext:, если первый возвращает YES).


Update:

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

+1

Похоже на ... как на iOS 7, эти методы находятся на 'MKOverlayRenderer', а не' MKOverlayView'. – livingtech

+0

Если вы хотите обновить всю карту, вы можете просто вызвать 'setNeedsDisplay ' – gcamp

0

На самом деле мне пришлось наложить наложение, чтобы аннулировать путь, чтобы очистить старый путь перед настройкой нового. [polygonView invalidatePath]. Говорить о том, что для просмотра карты требуется обновление дисплея, было недостаточно для меня.

1

Использование MKAnnotations. Вы можете изменить их координаты. Просто отключите любые связанные с касанием вещи. Для рисования аннотаций вам понадобится собственный код рисования, OpenGL, вероятно, сделает трюк. Никто не знал бы разницы.

+3

AnnotationViews остаются такими же, если вы увеличиваете масштаб, размеры наложения относительно масштаба масштабирования вправо?Мне нужно указать круг на карте, который должен обозначать определенную область (возможно, парк или что-то еще). – yuf

0

Это, похоже, заставляет карту обновлять наложения. Вероятно, аннотации.

[self.mapView setCenterCoordinate: self.mapView.centerCoordinate];

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