2010-02-17 5 views
5

He subclasificado MKAnnotationView para crear una anotación que básicamente dibuja un círculo alrededor de un punto en una vista de mapa mediante la anulación de drawRect. El círculo se basa bien en las siguientes situaciones (en el simulador):MKAnnotationView desapareciendo al deslizar y hacer doble clic en el zoom

  • En la carga inicial de la vista de mapa
  • El golpe, pero sólo cuando el movimiento se detiene antes de deslizar extremos táctiles (de modo que el mapa no lo hace "costa" después de que termine el tacto)
  • El zoom pizca

El círculo desaparecerá cuando cualquiera de las siguientes acciones:

  • golpe fuerte en el mapa "costas" después toque los extremos de zoom
  • Pulse dos veces

El círculo volverá a aparecer si alguna de las acciones en el grupo de "trabajo" se toman después de que haya desaparecido.

¿Qué podría causar esto? No soy un experto en dibujar/mostrar/diseño (francamente, tampoco soy un experto en obj C o iPhone).

Aquí hay un código ligeramente simplificada que parece más relevante de mi subclase 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)); 
} 
+0

también ver este comportamiento, en busca de una solución ... –

+0

Incluso estoy enfrentando el mismo problema, ¿hay algo de suerte? – Ameya

+0

es el drawRect llamado en absoluto en el grupo de trabajo "no"? – Magnus

Respuesta

2

¿Ha agregado este método?

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

Esto está tomado de aplicación código de ejemplo de Apple llamada weathermap que fue retirado de Apple Developer Center, pero se puede encontrar en GitHub https://github.com/acekiller/iOS-Samples/blob/master/WeatherMap/Classes/WeatherAnnotationView.m

+0

Las anotaciones meteorológicas en el código de muestra desaparecen y vuelven a aparecer después de cada arrastre/zoom. – Robert

+1

Eso es porque lo implementaron de esa manera, consulte '- (void) mapView: (MKMapView *) map regionDidChangeAnimated: (BOOL)' método 'animado en' MapViewController.m ' –

+0

Funcionó para mí. Dunja, ¡gracias! – pho0

Cuestiones relacionadas