去掉隐式动画
实际上 iOS
好像是会在很多地方默认添加上动画的。这些动画倒也还好,但是有的时候就和需求不符就比较烦人了。
前几天偶然的再次查到了这个方法,于是决定开个文章记录一下。
感谢参考1,原作者的总结。本文基本引用自参考1。
说到隐式动画,之前在做手势控件的时候,对于 CALayer
的一些操作就会有隐式动画,例如说下面这行代码就会有隐式动画:
self.frameLayer.frame = self.frameView.bounds;
这里介绍几种可以去掉系统动画的方法。如果您想隐藏的是 CALayer
相关的动画,请直接参考 方法三。
方法一
方法一是使用 UIView
类的类方法: performWithoutAnimation
[UIView performWithoutAnimation:^{
// your code
}];
如果你的 App
需要最少支持到 iOS 7 。那么推荐你使用该方法。
方法二
该方法可行,但是实在是太蠢了,不建议使用
在你知道会产生动画的代码处,再次添加一个动画,只不过将这个动画的时间设为0:
[UIView animateWithDuration:0 animations:^{
[collectionView performBatchUpdates:^{
[collectionView reloadItemsAtIndexPaths:@[[NSIndexPath indexPathForItem:index inSection:0]]];
} completion:nil];
}];
方法三
方法四是针对 CALayer
的隐式动画的。这种情况下上面的三种方法是无效的,只能采用方法四:
[CATransaction begin];
[CATransaction setDisableActions:YES];
// CALayer 动画
self.frameLayer.frame = self.frameView.bounds;
[CATransaction commit];