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



有一个方法是由第三方API在动画块中调用的。在那个方法中,我应该建立一些子视图。但是在本例中,我不希望在构造子视图时出现动画。

是否有一种方法说"[UIView dontAnimateFromHere]…(UIView nowYouMayAnimateAgain)"?

确实有这样一种方法。就像这样:

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

…这将禁用通过block触发的UIView动画和使用旧的begin/end方法触发的动画。

也就是说,我假设你的第三方库是预编译的,否则你可以直接修改源代码:当然,它可能会以另一种方式做一些奇怪的事情和动画,所以你的解决方案可能会有所不同。

这不会禁用动画块中正在进行的更改:它们会立即发生。否则你就有可能发生不好的事情,因为你的第三方API可能会对视图的位置做出不正确的假设。

对于ios7及以后的版本,有这个UIView的+performWithoutAnimation:.

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

最新更新