如何同步单元格动画
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
我正在尝试在 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