• Tips:取消UICollectionView的隐式动画


    http://www.cocoachina.com/ios/20151204/14211.html

    UICollectionView在reloadItems的时候,默认会附加一个隐式的fade动画,有时候很讨厌,尤其是当你的cell是复合cell的情况下(比如cell使用到了UIStackView)。

    下面几种方法都可以帮你去除这些动画

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    //方法一
    [UIView performWithoutAnimation:^{
        [collectionView reloadItemsAtIndexPaths:@[[NSIndexPath indexPathForItem:index inSection:0]]];
    }];
    //方法二
    [UIView animateWithDuration:0 animations:^{
        [collectionView performBatchUpdates:^{
            [collectionView reloadItemsAtIndexPaths:@[[NSIndexPath indexPathForItem:index inSection:0]]];
        } completion:nil];
    }];
         
    //方法三
    [UIView setAnimationsEnabled:NO];
    [self.trackPanel performBatchUpdates:^{
        [collectionView reloadItemsAtIndexPaths:@[[NSIndexPath indexPathForItem:index inSection:0]]];
    } completion:^(BOOL finished) {
        [UIView setAnimationsEnabled:YES];
    }];

    如果你的APP只支持iOS7+ 推荐使用第一种方式performWithoutAnimation(感谢@sunnyxx的tip) 简单方便

    but

    问题还没有结束 上面介绍的方法只能解决UIView的Animation 如果你的cell中还包含有CALayer的动画 比如这样

    1
    2
    3
    4
    5
    6
    - (void)layoutSubviews
    {
        [super layoutSubviews];
         
        self.frameLayer.frame = self.frameView.bounds;
    }

    上述情况多用于自定义控件使用了layer.mask的情况 如果有这种情况 上面提到的方法是无法取消CALayer的动画的 但是解决办法也很简单

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    - (void)layoutSubviews
    {
        [super layoutSubviews];
         
        [CATransaction begin];
        [CATransaction setDisableActions:YES];
         
        self.frameLayer.frame = self.frameView.bounds;
         
        [CATransaction commit];
         
    }

    done!

  • 相关阅读:
    一个面试问题的答案总结
    全局变量与局部变量的特点
    浮点数类型在内存当中是如何存储的
    常用的几种调用约定
    裸函数
    安卓活动的启动模式
    安卓的生命周期
    android中的内部存储与外部存储
    堆栈图学习汇编结束篇最后一个堆栈图的练习
    Android内部存储与外部存储的文件操作类
  • 原文地址:https://www.cnblogs.com/itlover2013/p/5024446.html
Copyright © 2020-2023  润新知