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

Posted

技术标签:

【中文标题】如何将带有 imagepickercontroller 的照片作为缩略图放入 collectionView 单元格【英文标题】:how to get a photo with imagepickercontroller into the collectionView cell as thumbnail 【发布时间】:2020-06-27 12:24:58 【问题描述】:

我尝试创建一个代码来从相册中挑选照片并将其作为缩略图显示在屏幕上的集合视图单元格中。每次单击按钮,我都会选择一张照片,新照片将出现在以前的缩略图旁边。 CollectionView 将有单行垂直滚动。 我很难将图像从pickercontroller didFinishPickingMediaWithInf 方法转移到collectionView cellForItemAt 方法中。我通过使用虚拟 UIImageV 找到了解决方案,但它只显示第一张照片而不显示其他照片。我没有任何崩溃。您能否帮助我更正代码以将我从相册中选择的照片上传到收藏视图单元格中。请看下面的代码:

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

    public let imagePicker = UIImagePickerController()
    
    @IBOutlet weak var dummyImageView: UIImageView!
    
    private let reuseIdentifier = "myViewCell"
    
    var myImage = [UIImage]()
    
    @IBOutlet var collectionView: UICollectionView!
    
    override func viewDidLoad() 
        super.viewDidLoad()
        
        dummyImageView.isHidden = true
        collectionView.dataSource = self
        collectionView.delegate = self
                
    
        
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
        return myImage.count    
    
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
        
       let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier , for: indexPath) as! MyViewCell
        
        cell.backgroundColor = UIColor.blue
        
        let imageView = cell.myImage
        myImage.append(dummyImageView.image!)
        imageView!.image = myImage[indexPath.row]
        
        return cell
        
    

    @IBAction func imageButtonPressed(_ sender: Any) 
        
        imagePicker.delegate = self
        imagePicker.sourceType = .photoLibrary
        imagePicker.allowsEditing = false
         
        self.present(imagePicker, animated: true, completion: nil)
      
       
        
      

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) 
        
    
        if  let image = info[.originalImage] as? UIImage
            print("last value",myImage.count)
            
            dummyImageView.image = image
            myImage.append(dummyImageView.image!)
            
            collectionView.reloadData()
           
        
         else 
            print("error to load")
        
               
       dismiss(animated: true, completion: nil)    
    

【问题讨论】:

【参考方案1】:

这个问题并不明显,所以我不得不在我的机器上重新创建它。实际上 myImage 数组在下面的函数中被加载了两次。

    didFinishPickingMediaWithInfo cellForItemAt

这会导致集合视图中的数据被添加到 myImage 数组中。 删除 cellForItemAt 中的以下分配,解决了该问题。 // myImage.append(dummyImageView.image!)

【讨论】:

谢谢。我已经通过删除虚拟图像视图对其进行了更新,并且运行良好。

以上是关于如何将带有 imagepickercontroller 的照片作为缩略图放入 collectionView 单元格的主要内容,如果未能解决你的问题,请参考以下文章

将带有 exif 的图像转换为 NSData 类型

如何使用 ImagePickerController 直接显示“相机胶卷”

从 imagePickerController AFNetWorking 3.0 上传图像到服务器

imagePickerController 返回 0 字节的图像

如何对相机胶卷中的照片进行方形切割?

Swift 3 - 无法覆盖'imagePickerController'