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

时间:2011-09-25 23:03:10

标签: iphone ios ipad animation

有一种方法可以通过第三方API在动画块中调用。在那个方法中,我应该建立一些子视图。但在这种情况下,我不希望在构建子视图时发生动画。

有没有办法说“[UIView dontAnimateFromHere] ... [UIView nowYouMayAnimateAgain]”?

2 个答案:

答案 0 :(得分:19)

是的,确实有这样的方式。就像这样:

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

...这将禁用通过块触发的UIView动画和使用旧的开始/结束方法触发的动画。

那就是说,我假设您的第三方库是预先编译的,否则您可以直接修改源:当然可能它做了一些奇怪的事情并以另一种方式制作动画,因此您的里程可能因此解决方案而异。

这不会禁用动画块中的更改:它们会立即发生。否则你会冒很大的风险,因为你的第三方API会假设视图可能不合适。

答案 1 :(得分:5)

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

请注意,performWithoutAnimation对于在动画块中立即执行更改很有用,但它不会禁用嵌套块中的动画调用,因此为方便起见使用它,但它不够健壮作为原始答案的setAnimationsEnabled