2010-02-02 5 views
7

J'ai essayé d'ajouter une animation à viewDidLoad et viewDidAppear, mais il ne fonctionne pas:Comment ajouter une animation à l'UIView dans viewDidAppear?

- (void)viewDidAppear:(BOOL)animated{ 
[UIView beginAnimations:@"transition" context:NULL]; 
[UIView setAnimationTransition:110 forView:self.view cache:YES]; 
[UIView commitAnimations]; 
} 

Pourquoi?

Répondre

0

Vous n'indiquez pas à l'affichage l'état qu'il doit animer pour qu'il ne fasse rien. Vous devez placer le code entre beginAnimations:context: et commitAnimations qui modifie l'apparence de la vue (par exemple en supprimant une sous-vue et en en ajoutant une autre).

+0

Hm, je pense que je n'ai pas besoin de lui dire ça. J'ai essayé mon code dans un IBAction et cela fonctionne. J'ai écrit setAnimationTransition: forView: alors j'ai écrit que l'animation devrait être dans la vue. Cela ne fonctionne pas dans viewDidLoad et viewDidAppear-methode. – Flocked

0
  1. Vous n'utilisez pas correctement beginAnimations: et commitAnimations. Vous êtes censé mettre entre eux quelque chose qui normalement ne serait pas animé: par ex. avec self.view.alpha = 0.5 vous obtenez un effet de fondu. Ils n'ont aucun effet sur tout ce qui n'est pas entre eux.

  2. Au moment où viewDidAppear: est appelée, votre vue, bien ... est apparue. Il est trop tard pour animer quoi que ce soit. Qu'est-ce que vous voulez vraiment faire quelque chose comme ceci:

    - (void)showMyViewWithAnimation { 
        [UIView beginAnimations:nil context:nil]; 
        [UIView setAnimationTransition:110 forView:childView cache:YES]; 
        [parentView addSubview:childView]; 
        [UIView commitAnimations]; 
    } 
    

    Dans l'exemple ci-dessus, childView est ce que dans votre exemple est appelé self.view.

  3. Veuillez écrire le nom de la transition; personne ne sait ce que 110 est en le regardant. C'est un mauvais style. </pédanterie>

+0

Le bogue dans ce code est que vous devriez faire 'setAnimationTransition: forView:' sur 'self.view', pas' drum.view'. Dans les docs, il est dit: "Définissez la transition sur la vue conteneur." – lawrence

+0

Mais je veux l'effet pour le drum.view;) C'est la raison pour laquelle j'ai essayé d'obtenir l'animation dans viewDidLoad de drumViewController. – Flocked

24

J'ai eu le même problème et je pense avoir trouvé la solution sur ce SO question.

Lorsque viewDidAppear est appelé, vous ne voyez toujours rien à l'écran (malgré le nom), mais vous êtes sur le point de le faire. Vous pouvez ensuite utiliser un execSelector: withDelay ou un NSTimer pour lancer votre animation. Le délai peut être juste 0.1 et votre animation jouera juste quand l'écran apparaît.

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 

    NSLog(@"View did appear!"); 

    [self performSelector:@selector(animationCode) withObject:nil afterDelay:0.1f]; 
} 

- (void)animationCode { 
    // you animation code 
} 
+0

Cela a fonctionné pour moi. Merci! – windson

+0

J'ai lu beaucoup d'articles avant. Et seulement cela m'a réussi, Merci. –

+0

Merci! Cela a fonctionné pour moi aussi! –

Questions connexes