当前位置: 首页 > 知识库问答 >
问题:

停止特定UIViewAnimation块-iOS

邵伟
2023-03-14

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

我尝试过使用以下方法:

[button.layer removeAllAnimations];

但它什么都没做,动画还在继续。

然后,我尝试使用一个简单的BOOL值,并在BOOL设置为"NO"后,让动画从方法返回,但这也不起作用。

以下是我试图停止的动画:

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

谢谢你,丹。

共有3个答案

金骞尧
2023-03-14

我的理解是,从相关层移除所有动画应该会停止所有动画。[((UIButton*)_buttons[num])。图层移除AllAnimations];怎么样?

叶鹭洋
2023-03-14

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

[yourRequiredView.layer removeAllAnimations]; 
杨利
2023-03-14

如果使用UIKit动画,则无法访问running animation属性。因此,如果你想在核心动画的运行时修改动画,我建议你使用核心动画。

这是太简单,以删除阿尔法的视图,如下图所示。

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框架添加到你的项目中。

希望有帮助。

 类似资料:
  • 我有一个简单的UILabel,当你长按它时,它就会开始旋转。我使用以下代码成功地实现了这一点: 用户只需双击标签,就可以在任何时候停止这个动画。下面是代码: 问题是,下次你长按标签时,它没有反应。旋转动画不会再次启动。你必须再次点击它才能让它再次运行。 所以模式是: 1)长按-动画开始 2)双击-动画停止 3)长按-什么都没有发生 4)再次长按-动画再次开始 我该怎么解决这个问题?

  • 问题内容: 我有一个按钮“ addCashier”,它正在创建一个名为“ Cashier”的线程,现在该线程只是每4秒简单地生成一个订单,该线程的run()方法中有while(true)循环。那里一切都很好,但是现在我想添加一个按钮来模拟收银员注销。我在我的while循环onDuty和一个公共函数logOff()中添加了一个布尔变量,该函数将onDuty布尔值设置为false,以使我退出运行的wh

  • 如何阻止viewpager仅向一个方向滚动。例如,只允许向右滑动,而不允许向左滑动。我完全被卡住了,任何帮助都将不胜感激。要注意的是,我需要让它在Android 2.2版上工作,所以我使用ViewPager的兼容性库。 提前感谢

  • Since 10.0.18 stopContinuousLocation stopContinuousLocation 停止持续获取当前设备的经纬度信息 支持版本:从10.0.18开始 使用方法 和startContinuousLocation 配对使用, 单独使用没有效果, 且一定要先点击 启动持续定位,在点击停止持续定位才有效果。 测试地址:startContinuousLocation Al

  • 我有一个计划任务,当应用程序上下文加载时开始工作,并一直运行到程序结束。 我想节省一些资源,只在需要时运行计划任务。 下面是我想象的抽象代码。 我很好奇,有可能达到这样的结果吗?

  • 这是我的一部分代码。好吧,我的问题是,当我输入错误的值时,如何跳过catch块?例如,正如你们所看到的,我需要坐标为双精度或浮点,但当我输入字符串时,它在循环时开始无限大。在用户输入正确的值之前,如何防止它并使程序从头开始? 这是我的代码,没有循环和标签。在正确的数据输入之前,我如何才能使代码工作