J'ai sous-classé le MKAnnotatonView
et remplacer les méthodes initWithAnnotation:resueIdentifier
et drawRect
pour ajouter une autre image derrière l'image "avant".
Il semble que c'est ce que suggère la référence de classe MKAnnotationView
d'Apple.
Seulement que c'est difficile. Si vous sous-classez le MKAnnotationView
, la propriété d'image existe toujours. Ils ont fait quelque chose à propos du correctement afin qu'il soit lié au dessin. Peut-être, ils ont outrepassé le drawRect pour dessiner l'image APRÈS que l'initialisation est faite.
De même, si vous ne définissez pas la propriété d'image, le cadre de votre annotationView
personnalisé est défini sur la taille 0 et la méthode drawRect
n'est pas appelée. Enfin, Apple affirme que les images doivent être entièrement remplies, c'est-à-dire qu'elles doivent utiliser une couleur transparente pour l'arrière-plan des dessins.
Ainsi: Dans votre sous-classe:
- (id)initWithAnnotation:(id <MKAnnotation>)annotation reuseIdentifier:(NSString *)identifier
{
self = [super initWithAnnotation:annotation reuseIdentifier:identifier];
if (self)
{
UIButton *rightButton = [UIButton buttonWithType: UIButtonTypeDetailDisclosure];
[rightButton addTarget:self
action:@selector(myShowAnnotationAddress:)
forControlEvents:UIControlEventTouchUpInside];
self.rightCalloutAccessoryView = rightButton;
self.canShowCallout = YES;
self.multipleTouchEnabled = NO;
self.frame = CGRectMake(0, 0, 65, 100);
self.backgroundColor = [UIColor clearColor];
return self;
}
return nil;
}
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
CGPoint drawPoint = CGPointMake(0.0f, 0.0f);
UIImage *shadowImage = [UIImage imageNamed:@"shadow_image.png"];
[shadowImage drawAtPoint:drawPoint];
UIImage *frontImage = [UIImage imageNamed:@"front_image.png"];
[frontImage drawAtPoint:drawPoint];
CGContextRestoreGState(context);
}
Après avoir fait la réponse, je me rends compte que vous vouliez réellement tirer derrière MKPinAnnotationView
. Ma réponse n'est pas là, bien qu'elle montre où le dessin devrait peut-être être fait. Evidemment, MKPinAnnottions
a sa propre méthode de dessin pour présenter un Pin et son ombre.
Je pense que vous pouvez probablement récupérer l'image Pin de la propriété self.image. Quant à l'ombre, je ne suis pas certain ... Il peut être en utilisant la méthode de dessin OPEN GL pour ajouter l'ombre, ou simplement en combinant une image d'ombre.
Enfin, l'image est accompagnée d'une animation. Je devine que c'est là que l'animation est exécutée. À ce stade, cependant, je n'ai pas testé.
Comment pouvez-vous cacher la broche faire cela? –
S'il n'y a pas MKPinAnnotationView, MKAnnotationView ne répondra pas aux touches. Comment résoudre le problème? – Satyam