有一种方法可以通过第三方API在动画块中调用。在那个方法中,我应该建立一些子视图。但在这种情况下,我不希望在构建子视图时发生动画。
有没有办法说“[UIView dontAnimateFromHere] ... [UIView nowYouMayAnimateAgain]”?
答案 0 :(得分:19)
是的,确实有这样的方式。就像这样:
[UIView setAnimationsEnabled:NO];
// Animations happen here
[UIView setAnimationsEnabled:YES];
...这将禁用通过块触发的UIView动画和使用旧的开始/结束方法触发的动画。
那就是说,我假设您的第三方库是预先编译的,否则您可以直接修改源:当然可能它做了一些奇怪的事情并以另一种方式制作动画,因此您的里程可能因此解决方案而异。
这不会禁用动画块中的更改:它们会立即发生。否则你会冒很大的风险,因为你的第三方API会假设视图可能不合适。
答案 1 :(得分:5)
对于iOS 7及更高版本,有这个UIView的+performWithoutAnimation:。
请注意,performWithoutAnimation
对于在动画块中立即执行更改很有用,但它不会禁用嵌套块中的动画调用,因此为方便起见使用它,但它不够健壮作为原始答案的setAnimationsEnabled
。