2010-09-24 3 views
2

J'ai ce code pour flasher une image sur une carte comme une partie de MKAnnotationView:ajouter et supprimer dans le bloc de sous-vue code ne sont pas animés

UIView* containerView = [mapView viewForAnnotation:enemy]; 
    UIImageView* redCircle = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Red_half_circle.png"]]; 


    [UIView transitionWithView:containerView 
         duration:2.9 
         options:UIViewAnimationOptionAutoreverse&&UIViewAnimationOptionRepeat 
        animations:^{ [containerView addSubview:redCircle];} 
        completion:^(BOOL finished){[redCircle removeFromSuperview]; }]; 

En tant que tel, rien ne se passe quand je le lance. Mais!!! Si je supprime le bloc de code "achèvement" et le remplace par NULL, alors au moins l'animation ajoute la sous-vue. Peut-être que les options ont quelque chose à voir avec ça? Question: Comment flashez-vous une image dans MKAnnotationView?

Merci beaucoup.

Répondre

2

Pour commencer:

Vous avez spécifié UIViewAnimationOptionAutoreverse&&UIViewAnimationOptionRepeat. C'est un "AND logique", pas un "AND bit à bit". Autoreverse est 16 (1<<4) et Repeat est 8 (1<<3), donc Autoreverse&&Repeat est 16&&8 qui est le même que 1 (car ils sont évalués comme des valeurs de vérité), qui se trouve être le même que UIViewAnimationOptionLayoutSubviews.

Vous voulez UIViewAnimationOptionAutoreverse&UIViewAnimationOptionRepeat. Deuxièmement: Vous n'avez pas spécifié de transition; cela équivaut à spécifier UIViewAnimationOptionTransitionNone. I pense cela signifie que la durée est ignorée (parce que vous avez spécifié ...TransitionNone), donc l'achèvement se produit immédiatement, de sorte que vous ne voyez rien. Troisième: Je ne pense pas non plus que les transitions UIView peuvent être répétées/inversées (il faudrait garder une trace des vues que vous avez supprimées/ajoutées, autant que je sache, il ne garde qu'une "capture d'écran" de l'état initial), mais je peux me tromper.

Vous pouvez avoir plus de chance avec quelque chose comme ceci:

[containerView addSubview:redCircle]; 
redCircle.alpha = 0; 
[UIView animateWithDuration:2.9 
    delay:0 
    options:UIViewAnimationOptionAutoreverse&UIViewAnimationOptionRepeat 
    animation:^{redCircle.alpha = 1;} 
    completion:NULL]; 

Cela devrait faire apparaître et disparaître progressivement. Vous pouvez être en mesure de le faire clignoter en définissant redCircle.hidden à la place (UIView.hidden n'est pas documenté comme animable, mais CALayer.hidden est animable, il peut donc encore fonctionner).

+0

Bien qu'anecdotique, c'est définitivement mon expérience que la propriété cachée est animable. – zpasternack

+0

Est-ce que ça change le côté caché à mi-chemin de l'animation? –

Questions connexes