gpt4 book ai didi

swift - 如何防止 willDisplay 单元格 : from being called when I reload a UICollectionView's data?

转载 作者:行者123 更新时间:2023-11-28 13:40:00 25 4
gpt4 key购买 nike

我在一个单元格上调用了一个动画(快速回避并缓慢增长)。动画正在 willDisplay cell: 中完成。我遇到的问题是,每当我从服务器获取更多数据后重新加载数据时,都会在所有可见单元格上调用 willDisplay cell: 。这导致所有可见细胞收缩和生长。有没有办法只在新获取的项目上调用重新加载数据?

当前对动画的调用是。

func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {

if collectionView.isDragging {
(cell as! AnimatedView).shrinkAndGrow(toScale: STANDARD_SHRINK_SCALE, withDuration: STANDARD_GROW_DURATION)
}

}

我目前的解决方法是

extension UICollectionView {

func reloadData(completion: @escaping () -> ()) {
UIView.animate(withDuration: 0, animations: { self.reloadData()})
{_ in completion() }
}
}

在获取方法中

DispatchQueue.main.async { [weak self] in
self?.orders.append(contentsOf: orders)
self?.shouldAnimate = false
self?.collectionView.reloadData { [weak self] in
self?.shouldAnimate = true
}
}

我是怎么处理的

func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {

if shouldAnimate, collectionView.isDragging {
(cell as! AnimatedView).shrinkAndGrow(toScale: STANDARD_SHRINK_SCALE, withDuration: STANDARD_GROW_DURATION)
}

}

如果有人有办法在不使用标志的情况下执行此操作,请告诉我。旗帜使事情变得困惑并引发 war 。

最佳答案

你可以试试

var shouldAnimate = false 

func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
if shouldAnimate {
(cell as! AnimatedView).shrinkAndGrow(toScale: STANDARD_SHRINK_SCALE, withDuration: STANDARD_GROW_DURATION)
}
}

并在第一次重新加载后更改 shouldAnimate

关于swift - 如何防止 willDisplay 单元格 : from being called when I reload a UICollectionView's data?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56176392/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com