如何同步单元格动画
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中为不可见单元格设置动画时如何防止延迟