swift 传递下一个图像时,集合视图单元格显示相同的图像

qvtsj1bj  于 11个月前  发布在  Swift
关注(0)|答案(1)|浏览(96)

我正试图从一个URL数组中显示集合视图中的图像。在cellForItemAt中,我使用循环检查数组中的每个URL,以确定它是图像还是视频。如果是图像,我将其设置为单元格的图像视图。如果它是一个视频,那么我从它获取缩略图,然后再次设置单元格的图像视图。
问题出在设置单元格的图像视图上。所有单元格图像更改为最后传递的图像。

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = imageCollectionView.dequeueReusableCell(withReuseIdentifier: "photoCell", for: indexPath) as? photoCell
    
    for mediaPaths in imgarr {
        do {
            let url = mediaPaths
         
            let typeID = try url.resourceValues(forKeys: [.typeIdentifierKey]).typeIdentifier
         
            let supertypes = UTType(typeID!)?.supertypes
            if supertypes!.contains(.image) {
                
                //print("Image file")
                cell?.cellImageVIew.image = UIImage(contentsOfFile: imgarr[indexPath.row].path())
                
            } else if supertypes!.contains(.movie) {
                print("Video file")
                
                cell?.cellImageVIew.image = getThumbnailFrom(path: mediaPaths)
                
            } else {
                print("Something else!")
            }
         
        } catch {
            print(error.localizedDescription)
        }
    }
    return cell!
}

字符串

  • Imgarr:是一个数组,其中包含所有图像和视频的目录URL。
  • 在cellForItemAt函数下,使用for循环检查每个URL的媒体类型,然后将其传递给图像视图。
bwntbbo3

bwntbbo31#

你的代码没有意义。调用cellForItemAt方法以获取特定IndexPath处单个单元格的图像。
在该方法中,循环遍历图像描述数组imgarr,依次加载每个图像描述,并将其安装到单元格的图像视图中。无论传递给你的是哪一个IndexPath,你都会加载数组中的所有图像,循环完成后,最后一个图像将留在单元格的图像视图中。
不要遍历所有图像。使用传递给您的indexPath参数来确定应该加载哪个图像,并将其加载到单元格的图像视图中。(集合视图可以显示单元格的一维列表、单元格的二维网格或单元格的一些其他任意分组。如果您要显示一个二维的单元格列表,您可以简单地使用indexPath.row来索引图像描述符数组。)

相关问题