如何同步单元格动画

How to synchronize cells animation

我正在尝试在 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

谁能帮帮我?

我找到了答案。

为了解决这个问题,我必须创建一个新的 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