Можно ли создать собственный анимированный MKAnnotationView? - PullRequest
3 голосов
/ 21 апреля 2010

Я пытаюсь смоделировать анимацию местоположения пользователя в MapKit (где позиция пользователя представлена ​​пульсирующей синей точкой). Я создал собственный подкласс MKAnnotationView, и в методе drawRect я пытаюсь перебрать набор цветов. Вот более простая реализация того, что я делаю:

- (void)drawRect:(CGRect)rect {
float magSquared = event.magnitude * event.magnitude;
CGContextRef context = UIGraphicsGetCurrentContext();
if (idx == -1) {
    r[0] = 1.0; r[1] = 0.5; r[2] = 0;
    b[0] = 0; b[1] = 1.0; b[2] = 0.5;
    g[0] = 0.5; g[1] = 0; g[2] = 1.0;
    idx = 0;
}
// CGContextSetRGBFillColor(context, 1.0, 1.0 - magSquared * 0.015, 0.211, .6);
CGContextSetRGBFillColor(context, r[idx], g[idx], b[idx], 0.75);
CGContextFillEllipseInRect(context, rect);
idx++;
if (idx > 3) idx = 0;
}

К сожалению, это просто приводит к тому, что аннотации являются одними из 3-х различных цветов, и не проходит через них. Есть ли способ заставить MKAnnotations постоянно перерисовывать, чтобы он казался анимированным?

1 Ответ

4 голосов
/ 21 апреля 2010

Вы можете звонить по номеру setNeedsDisplay, когда хотите перерисовать его. Самым простым способом сделать это было бы, если бы само представление аннотации настроило таймер, который срабатывал каждые 1/60 секунды или около того.

Более сложным подходом было бы поместить код рисования в пользовательский CALayer и применить к нему повторяющуюся анимацию Core Animation. См. мой ответ на "Анимация пользовательского свойства подкласса CALayer" для подхода.

...