【问题标题】: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

谁能帮帮我?

【问题讨论】:

    标签: ios swift uicollectionview uicollectionviewcell swift5


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2021-10-26
      • 1970-01-01
      • 1970-01-01
      • 2011-06-17
      • 1970-01-01
      • 2014-02-02
      • 2016-04-20
      • 1970-01-01
      • 2012-06-03
      相关资源
      最近更新 更多