2009-06-15 10 views
3

J'essaye de faire une animation à plusieurs étages, de sorte qu'un UIImageView (1) se fane, (2) se déplace, (3) glisse hors de l'écran.Comment créer une animation UIImageView à plusieurs étages?

Seule l'étape 1 semble fonctionner. Qu'est-ce que je fais mal? Voici le code:

// FIRST PART - FADE IN 
-(void)firstAnim 
{ 
    // 'sprite' is a UIImageView 
    [sprite setAlpha:0.1f]; 
    [UIView beginAnimations:@"anim1" context:NULL]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 
    [UIView setAnimationDuration:0.25]; 
    [UIView setAnimationDidStopSelector:@selector(secondAnim)]; 
    [UIView setAnimationCurve:UIViewAnimationCurveLinear]; 
    [sprite setAlpha:1.0f]; 
    [UIView commitAnimations]; 
} 


// SECOND PART - MOVE 
-(void)secondAnim 
{ 
    [UIView beginAnimations:@"anim2" context:NULL]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 
    [UIView setAnimationDuration:0.5]; 
    [UIView setAnimationDidStopSelector:@selector(thirdAnim)]; 
    [UIView setAnimationCurve:UIViewAnimationCurveLinear]; 
    sprite.frame = CGRectMake(170, 184, 20, 20); 
    [UIView commitAnimations]; 
} 

// THIRD PART - SLIDE OFF SCREEN 
-(void)thirdAnim 
{ 
    [UIView beginAnimations:@"anim3" context:NULL]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 
    [UIView setAnimationDuration:0.5]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
    sprite.frame = CGRectMake(170, 420, 20, 20); 
    [UIView commitAnimations]; 
} 

Répondre

4

Vous devez ajouter un appel à vous définir comme le délégué de l'animation:

[UIView setAnimationDelegate:self]; 

Ce serait une bonne idée de vous désinitialiser en tant que délégué (ensemble à zéro) dans le dernier bloc d'animation.

+0

merci. j'ai aussi dû à la ligne setAnimationDidStopSelector à: [UIView setAnimationDidStopSelector: @selector (secondAnim: finished: context :)]; – cannyboy

4

La solution complète à votre question est:

1) définir le délégué d'animation

2) utiliser la signature de sélection correcte et méthode

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:.5]; 
[UIView setAnimationDelegate:self]; //set delegate! 
[UIView setAnimationDidStopSelector: 
    @selector(secondAnim:finished:context:)]; 


-(void)secondAnim:(NSString *)animationID 
     finished:(NSNumber *)finished 
      context:(void *)context { 

    //animation #2 
} 
Questions connexes