Ho implementato un'annotazione personalizzata derivata da MKAnnotation denominata ContainerAnnotation e una vista di annotazione personalizzata derivata da MKAnnotationView con un drawRect: metodo denominato ContainerAnnotationView. Per qualche ragione drawRect: il metodo non viene chiamato e non riesco a capire perché.MKAnnotationView drawRect: non viene chiamato
Ecco il codice sorgente per la mia vista di annotazione.
ContainerAnnotationView.h:
@interface ContainerAnnotationView : MKAnnotationView
{
}
@end
ContainerAnnotationView.m:
@implementation ContainerAnnotationView
- (void) drawRect: (CGRect) rect
{
// Draw the background image.
UIImage * backgroundImage = [UIImage imageNamed: @"container_flag_large.png"];
CGRect annotationRectangle = CGRectMake(0.0f, 0.0f, backgroundImage.size.width, backgroundImage.size.height);
[backgroundImage drawInRect: annotationRectangle];
// Draw the number of annotations.
[[UIColor whiteColor] set];
UIFont * font = [UIFont systemFontOfSize: [UIFont smallSystemFontSize]];
CGPoint point = CGPointMake(2, 1);
ContainerAnnotation * containerAnnotation = (ContainerAnnotation *) [self annotation];
NSString * text = [NSString stringWithFormat: @"%d", containerAnnotation.annotations.count];
[text drawAtPoint: point withFont: font];
}
@end
Dal mio punto di vista del controller:
- (MKAnnotationView *) mapView: (MKMapView *) mapView viewForAnnotation: (id <MKAnnotation>) annotation
{
if ([annotation isKindOfClass: [ContainerAnnotation class]])
{
ContainerAnnotationView * annotationView = (ContainerAnnotationView *)[_mapView dequeueReusableAnnotationViewWithIdentifier: _containerMapAnnotationId];
if (annotationView == nil)
{
annotationView = [[[ContainerAnnotationView alloc] initWithAnnotation: annotation reuseIdentifier: _containerMapAnnotationId] autorelease];
annotationView.centerOffset = CGPointMake(0, -17.5);
annotationView.rightCalloutAccessoryView = [UIButton buttonWithType: UIButtonTypeDetailDisclosure];
annotationView.canShowCallout = YES;
}
annotationView.annotation = annotation;
return annotationView;
}
// etc...
}
ho altre annotazioni che utilizzano un v anilla MKAnnotation con un'immagine che funziona bene. Ho anche un'altra vista annotazione personalizzata che non implementa drawRect: funziona perfettamente. Qualche idea su cosa sto facendo male qui?
Come la vista diventa visibile? È reso visibile dopo mapView: viewForAnnotation: restituisce? –
Chiedo perché non vedo alcun codice per le altre viste di annotazione che li rendono esplicitamente visibili. In nessun posto chiamano setNeedsDisplay. –
Questo è tutto ciò di cui avevo bisogno per farlo funzionare. – VaporwareWolf