2011-12-21 1 views
1

Je veux faire un clin d'oeil bouton en utilisant les méthodes de style bloc de UIAnimation, en particulier:Puis-je utiliser setAnimationRepeatCount: dans un bloc d'animation UIView?

animateWithDuration:delay:options:animations:completion 

L'une des choses que je pense que je dois mettre est la propriété « AnimationRepeatCount » - cela peut être réglé dans le code du bloc d'animation comme ça?

- (void)animateItemWithBlinking:(BOOL)blinking { 

    __block BOOL isInBlinkState = blinking; 

    if (!isBlinking) 
    {  
     // Start blinking     
     [UIView animateWithDuration:0.50f 
      delay:0 
      options:UIViewAnimationCurveLinear 
      animations:^{ 
       // Can I call the AnimationRepeat setter here or 
       // should it be elsewhere outside this block? 
       [UIView setAnimationRepeatCount:1000]; 
       [UIView setAnimationRepeatAutoreverses:YES]; 

       [button setAlpha:0.0f];   
      } completion:^(BOOL finished) { 
       // eventually, this is a value that I want the method to return 
       isInBlinkState = !isInBlinkState;   
     }];   
    } 
    else 
    { 
     // Stop blinking 
     [UIView animateWithDuration:0.30f 
      delay:0 
      options:UIViewAnimationOptionAllowUserInteraction 
      animations:^{ 
       // Stop blinking - reset everything 
       [UIView setAnimationBeginsFromCurrentState:YES]; 
       [UIView setAnimationRepeatCount:1]; 

       [button setAlpha:1.0f];   
     } completion:^(BOOL finished) { 
      // eventually, this is a value that I want the method to return 
      isInBlinkState = !isInBlinkState;   
     }]; 
    } 
} 

appels Avant par blocs, ma méthode originale ressemblait à ceci:

- (void)animateItemWithBlinking:(BOOL) blinking { 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:0.50f]; 
    [UIView setAnimationCurve:UIViewAnimationCurveLinear]; 

    if(!blinking) {  
     // Start it 
     [UIView setAnimationRepeatCount:1000]; 
     [UIView setAnimationRepeatAutoreverses:YES]; 

     [button setAlpha:0.0f];     
    } else { 
     // Stop it 
     [UIView setAnimationBeginsFromCurrentState:YES]; 
     [UIView setAnimationRepeatCount:1]; 

     [button setAlpha:1.0f];   
    } 
    blinking = !blinking; 
    [UIView commitAnimations]; 
} 
+0

Vous pouvez jeter un oeil à cette question qui est similaire à la vôtre. http://stackoverflow.com/questions/4069758/repeat-count-for-uiview-block-based-animation –

Répondre

1

Oui, vous pouvez le mettre à l'intérieur du bloc, et il fera ce que vous attendez.

Questions connexes