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的隐式动画的问题的主要内容,如果未能解决你的问题,请参考以下文章

Flutter - 如何拥有任意数量的隐式动画

解决UICollectionView ReloadData闪一下(隐式动画)

ios隐式动画没有执行

SwiftUI 动画:一些隐式过渡动画在 iOS 13 上被破坏了?

DAE 的隐式/后向欧拉

追踪 Python 2 中的隐式 unicode 转换