如何同步单元格动画

Posted

技术标签:

【中文标题】如何同步单元格动画【英文标题】:How to synchronize cells animation 【发布时间】:2020-02-03 18:54:13 【问题描述】:

我正在尝试在 UICollectionView 的每个单元格中模拟闪烁的动画。

当我启动应用程序时,它运行良好:

但是当我向左滚动时,每个单元格都会自动获得动画:

我想要的是当我向左滚动它时,它就像第一张图片一样工作。有一段时间,我只是把这段代码放在下面做动画:

    func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) 
        guard let cell = cell as? ShimmeringCell else  return 
        UIView.animate(withDuration: 1.0, delay: 0, options: [.autoreverse, .repeat], animations: 
            cell.alpha = 0.4
        , completion: nil)
    

这是完整代码:Github

谁能帮帮我?

【问题讨论】:

【参考方案1】:

我找到了答案。

为了解决这个问题,我必须创建一个新的UIView 并将其添加到UICollectionView 的子视图中:

    let newCollectionView: UICollectionView = 
        // Here was creating a collectionView
        return collection
    ()

    let viewExample: UIView = 
        // Here was creating a new view
        return view
    ()

    override func viewDidLoad() 
        super.viewDidLoad()

        newCollectionView.delegate = self
        newCollectionView.dataSource = self
        newCollectionView.register(ShimmeringCell.self, forCellWithReuseIdentifier: cellId)
        self.view.addSubview(self.newCollectionView)
        setupCollection()
    

    private func setupCollection() 
        // Constraints...

        self.newCollectionView.addSubview(self.viewExample)
        setupViewExample()
    

    private func setupViewExample() 
        // Constraints...
    

之后,我只是把动画放在这个视图中:

    override func viewDidLoad() 
        super.viewDidLoad()

        newCollectionView.delegate = self
        newCollectionView.dataSource = self
        newCollectionView.register(ShimmeringCell.self, forCellWithReuseIdentifier: cellId)
        self.view.addSubview(self.newCollectionView)
        setupCollection()

        self.viewExample.alpha = 0.6
        UIView.animate(withDuration: 1.0, delay: 0, options: [.repeat, .autoreverse, .allowUserInteraction], animations: 
            self.viewExample.alpha = 0
        , completion: nil)
    

结果:

谢谢大家,在世界的某个地方见。

使用此解决方案的 Github:Github

【讨论】:

以上是关于如何同步单元格动画的主要内容,如果未能解决你的问题,请参考以下文章

尝试在collectionview中为不可见单元格设置动画时如何防止延迟

如何使用 UIButton 为单元格设置动画?

具有调整单元格动画大小的动态单元格大小

如何制作像 UITableView 一样的动画重新排序单元格?

调整单元格大小时如何使表格视图动画平滑

如何使用持续时间为单个 UICollectionView 单元格设置动画