Могу ли я использовать setAnimationRepeatCount: внутри блока анимации UIView? - PullRequest
2 голосов
/ 22 декабря 2011

Я хочу сделать мигание кнопки, используя методы стиля блоков UIAnimation, в частности:

animateWithDuration:delay:options:animations:completion

Одной из вещей, которые мне нужно установить, является свойство 'AnimationRepeatCount' - это можно установить в коде блока анимации следующим образом?

- (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;        
        }];
    }
}

До вызовов на основе блоков мой оригинальный метод выглядел так:

- (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];
}

1 Ответ

2 голосов
/ 22 декабря 2011

Да, вы можете установить его внутри блока, и он будет делать то, что вы ожидаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...