如何在UIView动画块中禁用嵌套代码的动画效果?

8

有一个方法在第三方API中的动画块内被调用。在这个方法里,我需要构建一些子视图。但是在这种情况下,我不希望在构建子视图时发生动画。

有没有一种方式可以说“[UIView dontAnimateFromHere] ... [UIView nowYouMayAnimateAgain]”?

2个回答

21

确实有这样一种方法。它是这样的:

[UIView setAnimationsEnabled:NO];
// Animations happen here
[UIView setAnimationsEnabled:YES];

这将禁用通过块触发的UIView动画以及使用旧的begin/end方法触发的动画。

话虽如此,我假设你的第三方库是预编译的,否则你可以直接修改源代码:当然也有可能它正在以其他方式进行奇怪的动画,因此此解决方案可能会产生不同的结果。

这不会禁用动画块中所做的更改:它们将立即发生。否则,由于第三方API会对视图的位置产生错误的假设,你可能会遇到糟糕的事情。


7

对于iOS 7及以上版本,有这个UIView的+performWithoutAnimation:

请注意,performWithoutAnimation对于在动画块内立即执行更改非常有用,但它不会禁用在嵌套块内进行的动画调用,因此仅用于方便,但不如原始答案的setAnimationsEnabled稳健。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接