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]; }