如何在 CollectionView 中显示从照片库或相机中选择的图像?画廊视图

Posted

技术标签:

【中文标题】如何在 CollectionView 中显示从照片库或相机中选择的图像?画廊视图【英文标题】:How can I display selected images from the Photo Library or Camera in a CollectionView? Gallery view 【发布时间】:2018-11-29 20:20:29 【问题描述】:

大家, 我是 Swift 的初学者,目前没有任何进展。 我已经用 CollectionView 构建了一个视图,并希望用照片库中的图片填充它。

不幸的是,我无法将 UIImages 创建为数组并将它们显示在 CollectionView 中。

我可以创建一个 UIImageView 并将其连接到我的 vc 中,并将图像加载到视图中。

但我无法将多张图片加载到 CollectionView 中。

如何建立自己的画廊,以便从相机或照片库中加载图片?

这是我之前的代码

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout 


@IBOutlet weak var myCollectionView: UICollectionView!

let dataArray = ["1", "2", "3", "4", "5"]

override func viewDidLoad() 
    super.viewDidLoad()

    // Set Delegates
    self.myCollectionView.delegate = self
    self.myCollectionView.dataSource = self



@IBAction func chooseImage(_ sender: UIBarButtonItem) 
    let imagePickerController = UIImagePickerController()
    imagePickerController.delegate = self

    let actionSheet = UIAlertController(title: "Quelle", message: "Wähle eine Quelle aus", preferredStyle: .actionSheet)

    actionSheet.addAction(UIAlertAction(title: "Kamera", style: .default, handler:  (action:UIAlertAction) in

        if UIImagePickerController.isSourceTypeAvailable(.camera)
            imagePickerController.sourceType = .camera
            self.present(imagePickerController, animated: true, completion: nil)
         else 
            print("Kamera nicht verfügbar")
        
    ))

    actionSheet.addAction(UIAlertAction(title: "Foto", style: .default, handler:  (action:UIAlertAction) in
        imagePickerController.sourceType = .photoLibrary
        self.present(imagePickerController, animated: true, completion: nil)
    ))

    actionSheet.addAction(UIAlertAction(title: "Abbrechen", style: .cancel, handler: nil))

    self.present(actionSheet, animated: true, completion: nil)


func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) 
    let image = info[UIImagePickerController.InfoKey.originalImage] as! UIImage
    picker.dismiss(animated: true, completion: nil)



func imagePickerControllerDidCancel(_ picker: UIImagePickerController) 
    picker.dismiss(animated: true, completion: nil)



func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
    return dataArray.count


func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ItemCell", for: indexPath) as! ItemCell
    cell.setData(text: self.dataArray[indexPath.row])
    return cell

单元格实现如下。

class ItemCell: UICollectionViewCell 

@IBOutlet weak var textLabel: UILabel!
@IBOutlet weak var imageView: UIImageView!


override func awakeFromNib() 
    super.awakeFromNib()
    // Initialization code


func setData(text: String) 
    self.textLabel.text = text


func setImg(image: UIImage) 
    self.imageView.image = image

但现在我想获取 UIImages 而不是标签“1”、“2”等等,而且只有我自己使用 imagePickerController 选择的那些。

【问题讨论】:

Select multiple image from photo library using swift 可能重复您不能使用 imagePicker 选择多个图像,但只能选择一个 【参考方案1】:

如果我理解了这个问题,那么您就快到了。如果你能对这个问题更明确一点会更好,因为我可能会浪费我的时间来回答。

我认为你想要的是:

从一个空的画廊开始 当用户选择一张图片时,它会被添加到图库中

您的 UICollectionViewCell 实现看起来不错,所以我认为它会起作用。

试试这些步骤。

将dataArray的声明改为

var dataArray: [UIImage] = []

将 ImagePicker 委托函数更改为:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) 
    let image = info[UIImagePickerController.InfoKey.originalImage] as! UIImage
    dataArray.append(image)
    picker.dismiss(animated: true, completion: nil)
    self.myCollectionView.insertItems(at: [IndexPath(item: dataArray.count, section: 0)])

将 cell.setData 更改为 cell.setImg

您可能需要以某种方式持久化图像以使其有用。

【讨论】:

非常感谢您的详细解答。这对我帮助很大。到目前为止它正在工作。抱歉,问题描述得很糟糕。 如果它正在回答问题,请接受这个作为答案。

以上是关于如何在 CollectionView 中显示从照片库或相机中选择的图像?画廊视图的主要内容,如果未能解决你的问题,请参考以下文章

如何将带有 imagepickercontroller 的照片作为缩略图放入 collectionView 单元格

如何使用 collectionview 将高质量图像发送到另一个视图

填充collectionView单元格图像时从Firebase加载错误的照片并非每次都发生

从照片中提取后,视频及其缩略图未按顺序保存

快速检测从照片库中删除的图像

如何更新在 Swift 4 之前和现在选择的 CollectionView 单元格?