如何禁用“隐式”或自动动画
Posted
技术标签:
【中文标题】如何禁用“隐式”或自动动画【英文标题】:How To Disable "Implicit" or Automatic Animations 【发布时间】:2011-05-13 17:54:58 【问题描述】:我的代码遇到了一些障碍。我正在使用OpenFlow——Apple 的封面流替代方案,目前免费供开发人员使用。在演示中,一切似乎都很好。 “流”通过使用 UIView 动画进行动画处理。
我已将演示改编为可在 iPad 上运行。除了由于某种原因视图现在隐式动画之外,一切都运行良好。我不明白为什么会这样。我什至不认为隐式动画在 ios 中可用。
我真的可以使用一些帮助来弄清楚为什么会发生这种情况,以及如何禁用它们。
【问题讨论】:
How to disable CALayer implicit animations?的可能重复 伙计们,10 年后一切都不同了:***.com/a/56980329/294884 【参考方案1】:好吧,后来我头疼了很多,浪费了很多时间,我弄清楚了我的代码到底发生了什么。我以为我正在体验隐式动画,但我不明白为什么会突然发生这种情况。
我决定我最好尝试理解隐式动画,所以我自己尝试找出如何在受控情况下实现它们。我从未见过隐式动画发生的原因是因为我一直在使用 UIView 或其子类之一。
我了解到,如果您从 CALayer 开始并严格使用图层,则对许多属性的所有更改都将隐含动画。
当您看到 UIView(及其后代)都自动支持图层并具有 CALayer 属性时,可能会有些困惑(我知道对我来说是这样)。
从不如此,很明显 UIView 以某种方式覆盖了其 CALayer 属性的隐式动画机制。所以如果你想要隐式动画,你必须直接使用 CALayer,而不是仅仅假设因为 UIView 有一个 CALayer 属性,它会表现得一样。
至于我遇到的错误...这可能是我遇到的最奇怪的错误。一切,无论我尝试什么,都是在没有任何动画代码的情况下对值的任何更改进行动画处理。罪魁祸首最终是嵌套的 UIView 动画块。
注意以下事项,看看您是否立即发现问题:
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1.2];
//animate something
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDelay:.8];
[UIView setAnimationDuration:.4];
//animate something else
[UIView commitAnimations];
我未能用另一个 [UIView commitAnimations] 终止嵌套块。它实际上是在我的程序中泄漏动画。一切都是动画,甚至是完全不同的类中的代码。这个错误被压扁了......到下一个!
【讨论】:
以上是关于如何禁用“隐式”或自动动画的主要内容,如果未能解决你的问题,请参考以下文章