停止特定的UIViewAnimation块 - iOS

时间:2015-07-08 06:23:31

标签: ios objective-c animation uiviewanimation animatewithduration

我有一个iOS应用程序,它运行几个不同的UIViewAnimation块来为屏幕上的几个不同对象设置动画。这一切都有效,但是如何在不停止其余动画的情况下停止其中一个动画块?

我尝试使用以下方法:

[button.layer removeAllAnimations];

但它没有做任何事情,动画只是继续。

然后我尝试使用简单的BOOL值,并在return设置为" NO"后从该方法获取动画BOOL,但是也不起作用。

这是我想停止的动画:

-(void)undo_animation:(int)num {

    // Fade out/in the number button label
    // animation which lets the user know
    // they can undo this particular action.

    [UIView animateWithDuration:0.5 delay:0.2 options:(UIViewAnimationOptionRepeat | UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionAllowUserInteraction) animations:^{

        // Mostly fade out the number button label.
        ((UIButton *)_buttons[num]).alpha = 0.2;

    } completion:^(BOOL finished) {

        [UIView animateWithDuration:0.5 delay:0.2 options:(UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionAllowUserInteraction) animations:^{

            // Fade in the number button label.
            ((UIButton *)_buttons[num]).alpha = 1.0;

        } completion:^(BOOL finished) {

            // Stop the animation if the BOOL
            // is set to 'NO' animations.

            if (anim_state_button == NO) {
                return;
            }
        }];
    }];
}

谢谢,Dan。

3 个答案:

答案 0 :(得分:2)

如果您正在使用UIKit Animations,则无法达到正在运行的动画属性。因此,如果您想在运行时修改动画,我建议使用Core Animation。

删除视图的alpha就像下面一样简单。

CABasicAnimation* fadein= [CABasicAnimation animationWithKeyPath:@"opacity"];
[fadein setToValue:[NSNumber numberWithFloat:1.0]];
[fadein setDuration:0.5];
[[moviepic layer]addAnimation:fadein forKey:@"MyAnimation"]; 

将动画添加到图层动画后将启动,并且您可以使用委托方法来通知animationDidFinish:method

- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag
{
    NSLog(@"Animation interrupted: %@", (!flag)?@"Yes" : @"No");
}

您也可以随时使用;

[[moviepic layer] animationForKey:@"MyAnimation"];

当然,您需要将CoreAnimation Framework添加到您的项目中。

希望它有所帮助。

答案 1 :(得分:1)

我认为简单的方法是从视图图层中删除所有动画,因为默认情况下所有动画都会添加到视图图层中。

[yourRequiredView.layer removeAllAnimations]; 

答案 2 :(得分:0)

我的理解是从相关图层中删除所有动画应停止所有动画。 [((UIButton *)_buttons[num]).layer removeAllAnimations];怎么样?