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

ope*_*rog 8 iphone animation ipad ios

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

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

lxt*_*lxt 19

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

[UIView setAnimationsEnabled:NO];
// Animations happen here
[UIView setAnimationsEnabled:YES];
Run Code Online (Sandbox Code Playgroud)

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

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

这不会禁用动画块中所做的更改:它们会立即发生.否则,您将面临发生不良事件的风险,因为您的第三方API会假设视图可能不合适.


Chr*_*ver 7

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

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