UICollectionView的隐式动画的问题
Posted 令狐冲
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UICollectionView的隐式动画的问题相关的知识,希望对你有一定的参考价值。
UICollectionView在reloadItems或者更新子控件布局的时候,默认会附加一个隐式的动画
有时候我们并不需要这个动画,如何解决呢?
下面两种方法都可以帮你去除这些动画:
//方法一 [UIView performWithoutAnimation:^{ 在内部相关操作 }]; //方法二 [UIView setAnimationsEnabled:NO]; 在内部相关操作 [UIView setAnimationsEnabled:YES];
问题还没有结束 上面介绍的方法只能解决UIView的Animation 如果你的cell中或者你的collectionview的子控件中还包含有CALayer的话,这个问题依然无法解决。
比如这样:
- (void)layoutSubviews { [super layoutSubviews]; self.frameLayer.frame = self.frameView.bounds; }
上述情况多用于自定义控件使用了layer.mask的情况 如果有这种情况 上面提到的方法是无法取消CALayer的动画的 但是解决办法也很简单
- (void)layoutSubviews { [super layoutSubviews]; [CATransaction begin]; [CATransaction setDisableActions:YES]; self.frameLayer.frame = self.frameView.bounds; [CATransaction commit]; }
以上是关于UICollectionView的隐式动画的问题的主要内容,如果未能解决你的问题,请参考以下文章
解决UICollectionView ReloadData闪一下(隐式动画)