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