用用户选择的照片替换集合视图中的默认图像- swift
Replacing default images in a collection view with user selected photos- swift
所以我有一个集合视图,它在每个单元格上填充三个默认图像。用户可以通过新的PHPicker select 图片,我要完成的是
- 用 selected 照片替换默认图像,所以第一个 selected 图像应该替换相机单元等......(通过底部的链接查看图像)
- 显示默认图像,以防用户删除 selected 图像
目前,当我将一张新照片发送到 imgArray 时,它会显示在相机单元格之前的一个新单元格中,因为我正在使用这样的插入方法:imgArray.insert(image, at: 0)。
我的代码:
var imgArray = [UIImage(systemName: "camera"), UIImage(systemName: "photo"), UIImage(systemName: "photo")]
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "1", for: indexPath) as! CustomCell
cell.imageView.image = imgArray[indexPath.row]
cell.imageView.tintColor = .gray
cell.imageView.layer.cornerRadius = 4
return cell
}
func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
dismiss(animated: true, completion: nil)
for item in results {
item.itemProvider.loadObject(ofClass: UIImage.self) { image, error in
if let image = image as? UIImage {
DispatchQueue.main.async {
self.imgArray.insert(image, at: 0)
self.collectionView.reloadData()
}
}
}
}
}
我试过删除数组的第一项,然后像这样插入新照片:
self.imgArray.removeFirst(1)
self.imgArray.insert(image, at: 0)
self.collectionView.reloadData()
但这只会像代码本身所说的那样工作一次,之后所有替换都只在第一个单元格中进行。
那么在第一次更换后我怎样才能到达其他细胞呢?任何其他给出相同结果的方法都会对我有很大帮助。提前谢谢大家!
before selection
after selecting three images
一种方法是保留两个图像数组,[UIImage]
类型的 defaultImages
和 [UIImage?]
类型的 inputImages
。 defaultImages
将保存您的相机和照片图像,inputImages
将保存用户 select 编辑的图像。将图像初始化为:
defaultImages = [UIImage(systemName: "camera"), UIImage(systemName: "photo"), UIImage(systemName: "photo")]
inputImages: [UIImage?] = [nil, nil, nil]
为了 select 索引 index
的正确照片,请使用:
image = inputImages[index] ?? defaultImages[index]
要在索引 index
处添加用户输入图像,请使用:
image: UIImage = ... // Get the image.
inputImages[index] = image
要删除索引 index
处的用户输入图像,请使用:
inputImages[index] = nil
所以我有一个集合视图,它在每个单元格上填充三个默认图像。用户可以通过新的PHPicker select 图片,我要完成的是
- 用 selected 照片替换默认图像,所以第一个 selected 图像应该替换相机单元等......(通过底部的链接查看图像)
- 显示默认图像,以防用户删除 selected 图像
目前,当我将一张新照片发送到 imgArray 时,它会显示在相机单元格之前的一个新单元格中,因为我正在使用这样的插入方法:imgArray.insert(image, at: 0)。
我的代码:
var imgArray = [UIImage(systemName: "camera"), UIImage(systemName: "photo"), UIImage(systemName: "photo")]
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "1", for: indexPath) as! CustomCell
cell.imageView.image = imgArray[indexPath.row]
cell.imageView.tintColor = .gray
cell.imageView.layer.cornerRadius = 4
return cell
}
func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
dismiss(animated: true, completion: nil)
for item in results {
item.itemProvider.loadObject(ofClass: UIImage.self) { image, error in
if let image = image as? UIImage {
DispatchQueue.main.async {
self.imgArray.insert(image, at: 0)
self.collectionView.reloadData()
}
}
}
}
}
我试过删除数组的第一项,然后像这样插入新照片:
self.imgArray.removeFirst(1)
self.imgArray.insert(image, at: 0)
self.collectionView.reloadData()
但这只会像代码本身所说的那样工作一次,之后所有替换都只在第一个单元格中进行。 那么在第一次更换后我怎样才能到达其他细胞呢?任何其他给出相同结果的方法都会对我有很大帮助。提前谢谢大家!
before selection
after selecting three images
一种方法是保留两个图像数组,[UIImage]
类型的 defaultImages
和 [UIImage?]
类型的 inputImages
。 defaultImages
将保存您的相机和照片图像,inputImages
将保存用户 select 编辑的图像。将图像初始化为:
defaultImages = [UIImage(systemName: "camera"), UIImage(systemName: "photo"), UIImage(systemName: "photo")]
inputImages: [UIImage?] = [nil, nil, nil]
为了 select 索引 index
的正确照片,请使用:
image = inputImages[index] ?? defaultImages[index]
要在索引 index
处添加用户输入图像,请使用:
image: UIImage = ... // Get the image.
inputImages[index] = image
要删除索引 index
处的用户输入图像,请使用:
inputImages[index] = nil