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

标签 ios nsthread uiviewanimation

我有一个菜单,其中的项目以 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];
    }                             
}

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

将不胜感激任何想法:)
谢.

最佳答案

您可以使用基于 UIView block 的动画制作动画,并设置 delay:。那里没有线程担心。

这些动画可以通过启动另一个基于 block 的动画来中断,并设置UIViewAnimationOptionBeginFromCurrentState选项。

对于 alpha 过渡,这很好,因为动画的当前位置是什么并不重要。如果您正在移动对象,您可以通过查询保存对象当前状态的 view.layer.presentationLayer 来获取当前位置。您将需要导入 QuartzCore 框架来执行此操作。这也为您提供了一个方法,removeAllAnimations,它会做很多事情,并将任何 View 直接带到它已挂起或事件的任何动画的端点。

关于ios - 停止在不同线程上执行的所有动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8027461/

相关文章:

ios - 如何在不删除 iOS 约束的情况下调整具有不同内容的 tableView 单元格的大小

ios - 更新标题时如何使按钮停止闪烁

ios - 如何使用 NSExtensionPrincipalClass 显示 Storyboard UI 进行共享扩展

ios - 调用一个函数,该函数将在函数指针上启动 NSThread

iOS - 后台进程和 UI 更新

ios - 动画 UIView 离开屏幕然后从底部无休止地离开屏幕

ios - 在 iOS 的屏幕上和屏幕外动画 View

ios - 架构 i386 的 undefined symbol : trying to add in AVFoundation

ios - UIViewAnimationOptions.TransitionFlipFromLeft 第二次不显示 UIView

objective-c - performSelector In Background 在关闭 View 时导致随机崩溃