在 swift5 中使用 collectionview.reloaddata 新数据到达时如何防止重绘?
How can I prevent redrawing when new data arrives using collectionview.reloaddata in swift5?
我已经使用 Swift 和 iOS 几个月了。当涉及到 CollectionView 的倒数第二项时,我想下载一个新图像。我在下载,但是reloadData函数一直在重绘,collectionview在top。我怎样才能防止它到达顶部?
private func getRandomPhoto() {
let url = "https://source.unsplash.com/random/400x800"
do{
var a = try Data(contentsOf: URL(string: url)!)
images.append(UIImage(data: a)!)
} catch {
print("err")
}
DispatchQueue.main.async {
self.collectionView.reloadData()
}
}
这是我的控制器视图代码
extension ViewController: UICollectionViewDelegate, UICollectionViewDataSource {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return images.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! ImageCollectionViewCell
cell.imageView.image = images[indexPath.row]
return cell
}
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
for cell in collectionView.visibleCells {
let indexPathh = collectionView.indexPath(for: cell)
if indexPathh?.row == images.count-1 {
let url = "https://source.unsplash.com/random/400x800"
getRandomPhoto()
}
}
}
}
我针对这个问题做了一个小视频。我希望这很清楚。
https://github.com/Egemenclr/StajCase/blob/master/Örnek/problem.gif
不要重新加载整个 table,而是为新下载的图像插入行
insertItems(at indexPaths: [IndexPath])
建议:不要一次又一次地下载同一张图片。最初下载并使用 NSCache 缓存它。当您再次需要图像时,尝试从缓存中获取。
我已经使用 Swift 和 iOS 几个月了。当涉及到 CollectionView 的倒数第二项时,我想下载一个新图像。我在下载,但是reloadData函数一直在重绘,collectionview在top。我怎样才能防止它到达顶部?
private func getRandomPhoto() {
let url = "https://source.unsplash.com/random/400x800"
do{
var a = try Data(contentsOf: URL(string: url)!)
images.append(UIImage(data: a)!)
} catch {
print("err")
}
DispatchQueue.main.async {
self.collectionView.reloadData()
}
}
这是我的控制器视图代码
extension ViewController: UICollectionViewDelegate, UICollectionViewDataSource {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return images.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! ImageCollectionViewCell
cell.imageView.image = images[indexPath.row]
return cell
}
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
for cell in collectionView.visibleCells {
let indexPathh = collectionView.indexPath(for: cell)
if indexPathh?.row == images.count-1 {
let url = "https://source.unsplash.com/random/400x800"
getRandomPhoto()
}
}
}
}
我针对这个问题做了一个小视频。我希望这很清楚。 https://github.com/Egemenclr/StajCase/blob/master/Örnek/problem.gif
不要重新加载整个 table,而是为新下载的图像插入行
insertItems(at indexPaths: [IndexPath])
建议:不要一次又一次地下载同一张图片。最初下载并使用 NSCache 缓存它。当您再次需要图像时,尝试从缓存中获取。