1

我正在尝试制作一个动画,其中文本在淡出时移动到底部,同时它重新出现在与以前相同的位置并执行相同的动画。这是我的代码:

for (int i=0; i<10; i++)
{
    [UIView animateWithDuration:0.5
                          delay:0.2f
                        options:UIViewAnimationCurveEaseInOut
                     animations:^{
                         productTextLabel.center = CGPointMake(381, 410);
                         productTextLabel.alpha = 0.0;
                         productTextLabel.center = CGPointMake(381, 340);
                         productTextLabel.alpha = 1;
                     }
                     completion:^(BOOL fin) {
                     }];

}

我的问题是我试图让这个动画发生不止一次。我正在使用 for 循环,但它只执行一次。

4

2 回答 2

14

您可以使用 animationWithDuration: 方法中的选项 UIViewAnimationOptionRepeat 和 UIViewAnimationOptionAutoReverse 自动重复和反转动画。

整个方法将变为:

[UIView animateWithDuration:0.5
                      delay:0.2f
                    options:UIViewAnimationCurveEaseInOut | UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoReverse
                 animations:^{
                     productTextLabel.center = CGPointMake(381, 410);
                     productTextLabel.alpha = 0.0;
                 }
                 completion:^(BOOL fin) {
                 }];

要取消动画,您可以调用

[productTextLabel.layer removeAllAnimations];

注意:您应该导入 QuartzCore 以便能够调用 removeAllAnimations 函数。

于 2012-08-21T15:44:27.623 回答
0

试试这种方式,它对我有用:

__block void (^fadePart1)() = ^{ productTextLabel.center = CGPointMake(381.f, 410.f); productTextLabel.alpha = 0.f; };
__block void (^fadePart2)() = ^{ productTextLabel.center = CGPointMake(381.f, 340.f); productTextLabel.alpha = 1.f; };
__block void (^fadePart1Finished)(BOOL finished) =  ^(BOOL finished) {
    if (_willFinishAnimation == false) {
        [UIView animateWithDuration:0.5f delay:0.2f options:UIViewAnimationCurveEaseInOut|UIViewAnimationOptionAllowUserInteraction animations:fadePart2 completion:^(BOOL finished) {
            if (_willFinishAnimation == false) [UIView animateWithDuration:0.5f delay:0.2f options:UIViewAnimationCurveEaseInOut|UIViewAnimationOptionAllowUserInteraction animations:fadePart1 completion:fadePart1Finished];  
        }]; 
    }
};
fadePart1Finished(false);

我有一个全局Boolean _willFinishAnimation;变量,在我设置动画之前false,当我想完成我设置的效果时true,就是这样。

于 2012-08-21T16:33:32.530 回答