我正试图从一个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的媒体类型,然后将其传递给图像视图。
1条答案
按热度按时间bwntbbo31#
你的代码没有意义。调用
cellForItemAt
方法以获取特定IndexPath
处单个单元格的图像。在该方法中,循环遍历图像描述数组
imgarr
,依次加载每个图像描述,并将其安装到单元格的图像视图中。无论传递给你的是哪一个IndexPath
,你都会加载数组中的所有图像,循环完成后,最后一个图像将留在单元格的图像视图中。不要遍历所有图像。使用传递给您的
indexPath
参数来确定应该加载哪个图像,并将其加载到单元格的图像视图中。(集合视图可以显示单元格的一维列表、单元格的二维网格或单元格的一些其他任意分组。如果您要显示一个二维的单元格列表,您可以简单地使用indexPath.row
来索引图像描述符数组。)