我的代码中遇到了一些问题。我正在使用OpenFlow - 一个目前免费供开发人员使用的Apple coverflow替代品。在演示中,一切似乎都很有效。使用UIView动画动画“流”。
我已将该演示改编为适用于iPad。一切都运作良好,除了由于某种原因现在观点隐含的动画。我无法弄清楚为什么会这样。我甚至不认为iOS中有隐式动画。
我真的可以使用一些帮助来弄清楚为什么会发生这种情况,以及如何禁用它们。
答案 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]终止嵌套块。它在我的程序中直接泄漏了动画。一切都是动画,甚至代码完全不同的类。这个错误被压扁了......下一个!