如何禁用“隐式”或自动动画

时间:2011-05-13 17:54:58

标签: ios uikit core-animation ipad

我的代码中遇到了一些问题。我正在使用OpenFlow - 一个目前免费供开发人员使用的Apple coverflow替代品。在演示中,一切似乎都很有效。使用UIView动画动画“流”。

我已将该演示改编为适用于iPad。一切都运作良好,除了由于某种原因现在观点隐含的动画。我无法弄清楚为什么会这样。我甚至不认为iOS中有隐式动画。

我真的可以使用一些帮助来弄清楚为什么会发生这种情况,以及如何禁用它们。

1 个答案:

答案 0 :(得分:2)

好吧,很多头疼,以及后来浪费的时间,我弄清楚我的代码到底发生了什么。我以为我正在体验隐式动画,但我无法弄清楚为什么这一切都会突然发生。

我决定更好地尝试理解隐式动画,所以我自己试验了如何在受控情况下实现它们。我之前从未见过隐式动画的原因是因为我总是使用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]终止嵌套块。它在我的程序中直接泄漏了动画。一切都是动画,甚至代码完全不同的类。这个错误被压扁了......下一个!