Я хочу иметь пользовательский 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 и добавить его в качестве подсмотра в представление карты и наложить на него жест щепотки, но это кажется взломанным и грязным.
Просьба описать для первого случая с KVO и MKOverlayPathRenderer, как вы заставили перерасчет вашего пути. – DisableR
Как вы это решили? –
Вместо того, чтобы круг сжимался и расширялся, я делал его так, чтобы круг всегда был одинаковой визуальной шириной, а масштаб карты увеличивался и уменьшался. – barndog