MKAnnotationView исчезает при пролистывании и двойном нажатии масштаба - PullRequest
6 голосов
/ 17 февраля 2010

Я создал подкласс MKAnnotationView для создания аннотации, которая в основном рисует круг вокруг точки на виде карты через переопределение drawRect. Круг хорошо рисует в следующих ситуациях (в симуляторе):

  • При начальной загрузке вида карты
  • При смахивании, но только когда движение свайпа остановлено до окончания касания (чтобы карта не «отклонялась» после окончания касания)
  • При крайнем увеличении

Круг исчезнет, ​​если произойдет любое из следующих действий:

  • Проведите пальцем там, где карта "плавает" после окончания касания
  • Двойное увеличение

Круг снова появится, если какое-либо действие в «рабочей» группе будет выполнено после его исчезновения.

Что может вызвать это? Я не эксперт по рисованию / отображению / верстке (честно говоря, я не эксперт по C и iPhone).

Вот несколько упрощенный код, который кажется наиболее актуальным из моего подкласса MKAnnotationView:

- (void)drawRect:(CGRect)rect {
    // Drawing code
 [self drawCircleAtPoint:CGPointMake(0,0) withRadius:self.radiusInPixels andColor:self.circleAnnotation.color];
}


- (void)drawCircleAtPoint:(CGPoint)p withRadius:(int)r {
    CGContextRef contextRef = UIGraphicsGetCurrentContext();

    float alpha = 0.75;

    CGContextSetRGBFillColor(contextRef, 255, 0, 0, alpha);
    CGContextSetRGBStrokeColor(contextRef, 255, 0, 0, alpha);

    // Draw a circle (border only)
    CGContextStrokeEllipseInRect(contextRef, CGRectMake(0, 0, 2*r, 2*r));
}

1 Ответ

2 голосов
/ 10 марта 2011

Вы добавили этот метод?

- (void)setAnnotation:(id <MKAnnotation>)annotation
{
    [super setAnnotation:annotation];
    [self setNeedsDisplay];
}

Это взято из примера приложения Apple от кода WeatherMap, которое было удалено из Apple Developer Center, но его можно найти на github. https://github.com/acekiller/iOS-Samples/blob/master/WeatherMap/Classes/WeatherAnnotationView.m

...