停止在不同线程上执行的所有动画

Sha*_*ali 5 nsthread uiviewanimation ios

我有一个菜单,其中的项目在3秒的间隔内一个接一个地弹出,我这样做:

for(UIButton *menuItem in menuItems){
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (0.3 * i) * NSEC_PER_SEC), dispatch_get_current_queue(), ^{
        [menuItem setAlpha:1.0];
    }                             
}
Run Code Online (Sandbox Code Playgroud)

是否可以在中间停止动画(例如,当触摸按钮时)?我尝试将所有内容设置为alpha 1.0但正如预期的那样,线程继续运行并再次显示项目.

会欣赏任何想法:)
Shai.

jrt*_*ton 3

您可以使用 UIView 基于块的动画来制作动画delay:。那里没有线程担心。

这些动画可以通过使用选项集启动另一个基于块的动画来中断UIViewAnimationOptionBeginFromCurrentState

对于 Alpha 过渡来说这很好,因为动画的当前位置是什么并不重要。view.layer.presentationLayer如果您正在移动对象,则可以通过查询保存对象当前状态的对象来获取当前位置。您需要导入 QuartzCore 框架才能执行此操作。这还为您提供了一种方法,removeAllAnimations该方法的作用与听起来差不多,并将任何视图直接带到其已挂起或活动的任何动画的端点。