2013-12-25 4 views
2

Я хочу иметь пользовательский MKOverlay, который представляет собой круг, привязанный к аннотации местоположения пользователя, который пользователь может изменять размер, зажимая. Я смог успешно достичь этого, используя MKOverlayPathRenderer и пользовательский объект MKOverlay, переопределив метод createPath и создав дугу. Изменение размера и перемещение наложения осуществлялось с использованием KVO по радиусу и координатным свойствам моего наложения. Однако изменение размера было невероятно изменчивым, и boundingMapRect был неправильно рассчитан.Изменение размера MKOverlay с использованием MKOverlayRenderer

Я также попытался использовать изображение и вместо подклассов MKOverlayPathRenderer только MKOverlayRenderer, перекрывая - (void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context, но при изменении размера мой процент процессора подскакивает до 160% использования (не большой, да?) И boundingRect снова втягивается неправильно.

Я действительно думаю, что способ сделать это с MKOverlayPathRenderer и, возможно, с атомарным счетчиком какого-либо типа, так что перерисовывается только называется называется каждые 5 или 10 раз жест щепотки запускается.

Есть ли у кого-нибудь предложения? Я также рассмотрел, но не пробовал сделать UIView и добавить его в качестве подсмотра в представление карты и наложить на него жест щепотки, но это кажется взломанным и грязным.

+0

Просьба описать для первого случая с KVO и MKOverlayPathRenderer, как вы заставили перерасчет вашего пути. – DisableR

+0

Как вы это решили? –

+0

Вместо того, чтобы круг сжимался и расширялся, я делал его так, чтобы круг всегда был одинаковой визуальной шириной, а масштаб карты увеличивался и уменьшался. – barndog

ответ

0

Когда вы вычисляете новый boundingMapRect на Overlay, вы должны вызывать invalidatePath на вашем Renderer. После этого система будет ссылаться на createPath для вас, когда это уместно.

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