如何在CollectionView中显示照片库或相机中的选定图像?图库视图

时间:2018-11-29 20:20:29

标签: ios swift uicollectionview uiimageview uiimage

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

不幸的是,我无法将UIImage创建为数组并将其显示在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选择的对象。

1 个答案:

答案 0 :(得分:0)

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

我想你想要的是:

  • 从一个空的画廊开始
  • 用户选择图像后,图像将被添加到图库中

您的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

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