我有一个collectionView并且有两个问题。首先,滚动太慢。我的collectionView从URL中的API接收数据,如下所示:
这是我的代码:
extension ViewController: UICollectionViewDelegate, UICollectionViewDataSource {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
if imageUrl.count >= 4 {
activity.stopAnimating()
activity.isHidden = true
}else{
DispatchQueue.main.async {
self.myCollectionView.reloadData()
}
}
return imageUrl.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = myCollectionView.dequeueReusableCell(withReuseIdentifier: "myViewCell", for: indexPath) as! myViewCell
if let url = NSURL(string: imageUrl[indexPath.row]){
if let data = NSData(contentsOf: url as URL){
cell.carImageView.contentMode = UIViewContentMode.scaleAspectFit
cell.carImageView.image = UIImage(data: data as Data)
}
}
cell.firstLabel.text = firstLabelArray[indexPath.row]
if secondLabelArray != []{
cell.secondLabel.text = secondLabelArray[indexPath.row]
}
return cell
}
}
第二个问题是我只需要刷新集合视图中的第三个单元格。那是我的第二个标签,但是当我尝试使用myCollectionView.reloadData()
时,它会重新加载所有单元格。我需要每秒刷新第三个单元格。
答案 0 :(得分:1)
要加载特定的单元格,请执行以下操作:
let indexPath = IndexPath(item: 2, section: 0)
collectionView.reloadItems(at: [indexPath])
您正在将图像加载到cellForItemAt
中,
只需确保您没有在主线程上加载图像
您可以使用库下载图像并缓存图像
答案 1 :(得分:0)
集合视图比较笨拙,因为您试图在主线程上显示来自url的图像。在从api下载图像然后在主线程上更新单元格之前,请在单元格中显示一些默认图像
答案 2 :(得分:0)
collectionView滞后的问题可能是您使用NSData的方式,请考虑使用Alamofire图像,像这样
SDL_Init()