【问题标题】:how to use multiple image picker in iOS with swift如何在 iOS 中快速使用多个图像选择器
【发布时间】:2016-09-07 02:14:10
【问题描述】:

我正在制作约会应用程序。 如您所知,用户需要在约会应用中注册多张图片。

所以我知道了如何在一个视图中使用 1 个图像选择器。

但我不知道如何添加多个图像选择器。

我知道我只能使用一个

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {  
}

func imagePickerControllerDidCancel(picker: UIImagePickerController) {
    picker.dismissViewControllerAnimated(false, completion:nil)
}

所以我找不到多个图像选择器视图的解决方案。

我的失败代码如下。

import UIKit

class RegisterPicture : UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {


@IBAction func pick1(sender: AnyObject) {

    let picker1 = UIImagePickerController()

    picker1.sourceType = UIImagePickerControllerSourceType.SavedPhotosAlbum

    picker1.allowsEditing = true

    picker1.delegate = self

    self.presentViewController(picker1, animated: false, completion: nil)
}

@IBAction func pick2(sender: AnyObject) {

    let picker2 = UIImagePickerController()

    picker2.sourceType = UIImagePickerControllerSourceType.SavedPhotosAlbum

    picker2.allowsEditing = true

    picker2.delegate = self

    self.presentViewController(picker2, animated: false, completion: nil)
}

@IBOutlet var picture1: UIImageView!

@IBOutlet var picture2: UIImageView!

func imagePickerController(picker1: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {

    picker1.dismissViewControllerAnimated(false, completion : nil)
    self.picture1.image = info[UIImagePickerControllerOriginalImage] as? UIImage

}

func imagePickerController(picker2: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {

    picker2.dismissViewControllerAnimated(false, completion : nil)
    self.picture2.image = info[UIImagePickerControllerOriginalImage] as? UIImage

}


func imagePickerControllerDidCancel(picker1: UIImagePickerController) {

    picker1.dismissViewControllerAnimated(false, completion:nil)

}

func imagePickerControllerDidCancel(picker2: UIImagePickerController) {

    picker2.dismissViewControllerAnimated(false, completion:nil)

}
}

【问题讨论】:

标签: ios swift


【解决方案1】:

对于 2020 年搜索此内容的任何人,Apple 在 iOS14 中引入了PHPickerViewController。这是文档:https://developer.apple.com/documentation/photokit/phpickerviewcontroller

以及解释其用法的 WWDC 介绍: https://developer.apple.com/videos/play/wwdc2020/10652/

【讨论】:

    【解决方案2】:

    您不能使用 UIImagePickerController,但可以使用自定义图像选择器。我认为 ELCImagePickerController 是最好的选择,但这里有一些您可以使用的其他库:

    目标-C

    1. ELCImagePickerController
    2. WSAssetPickerController
    3. QBImagePickerController
    4. ZCImagePickerController
    5. CTAssetsPickerController
    6. AGImagePickerController
    7. UzysAssetsPickerController
    8. MWPhotoBrowser
    9. TSAssetsPickerController
    10. CustomImagePicker
    11. InstagramPhotoPicker
    12. GMImagePicker
    13. DLFPhotosPicker
    14. CombinationPickerController
    15. 资产选择器
    16. BSImagePicker
    17. SNImagePicker
    18. DoImagePickerController
    19. grabKit
    20. IQMediaPickerController
    21. HySideScrollingImagePicker
    22. 多图像选择器
    23. TTImagePicker
    24. 选择图片
    25. ImageSelectAndSave
    26. 图像选择器-多选
    27. MultiSelectImagePickerController
    28. YangMingShan(Yahoo like 图像选择器)
    29. DBAttachmentPickerController
    30. BRImagePicker
    31. GLAssetGridViewController
    32. CreolePhotoSelection

    斯威夫特

    1. LimPicker(类似于 WhatsApp 的图像选择器)
    2. RMImagePicker
    3. DKImagePickerController
    4. BSImagePicker
    5. Fusuma(Instagram 之类的图片选择器)
    6. YangMingShan(Yahoo like 图像选择器)
    7. NohanaImagePicker
    8. 图像选择器
    9. OpalImagePicker
    10. TLPhotoPicker
    11. AssetsPickerViewController
    12. 警报和选择器/电报选择器

    【讨论】:

      【解决方案3】:
      @IBAction func btnTrophy1Action(_ sender: UIButton) {
              //GIVE TAG TO YOUR BUTTON
              self.view.endEditing(true)
              self.senderTag = sender.tag
              pickerOpen(sender: sender)
          }
      
      @IBAction func btnTrophy2Action(_ sender: UIButton) {
              //GIVE TAG TO YOUR BUTTON
              self.view.endEditing(true)
              self.senderTag = sender.tag
              pickerOpen(sender: sender)
          }
      
      func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
      
              if let image = info[UIImagePickerController.InfoKey.editedImage] as? UIImage {
                  //BASED ON THE TAG SAVE IMAGE TO PARTICULAR IMAGE PICKER
                  if self.senderTag == 101 {
                      //TROPHY 1
                      self.imgTrophy1.image = image
                      self.isTrophy1Selected = true
                  } else if self.senderTag == 102 {
                      //TROPHY 2
                      self.imgTrophy2.image = image
                      self.isTrophy2Selected = true
                  } else {
                      //TROPHY 3
                      self.imgTrophy3.image = image
                      self.isTrophy3Selected = true
                  }
              }
              picker.dismiss(animated: true, completion: nil)
          }
      

      【讨论】:

        【解决方案4】:

        这是我尝试解决此类问题的解决方案

        我使用单个图像选择器,然后使用包含字符串的枚举来确定哪个图像视图获取用户选择的图像。

        enum selectableImage: String {
                case image1
                case image2
                case image3
            }
        

        然后在每次调用imagePickerController 时,我都会像这样分配一个变量var imageSelected = selectableImage.image1。 然后最后在imagePickerController,我使用了这样的切换结构:

         func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        
                print("Inside imageController")
        
                print(info)
                // The info dictionary may contain multiple representations of the image. You want to use the original.
        
                guard let imagePicked = info[.originalImage] as? UIImage else {
                    fatalError("Expected a dictionary containing an image, but was provided the following: \(info)")
                }
        
                // Set photoImageView to display the selected image.
        
                switch imageSelected {
        
                case selectableImage.image1:
                     image1.image = imagePicked
        
                case selectableImage.image2:
                     image2.image = imagePicked
        
                case selectableImage.image3:
                    image3.image = imagePicked
        
                }
        
        
                // Dismiss the picker.
                dismiss(animated: true, completion: nil)
            }
        

        希望这会有所帮助。

        【讨论】:

          【解决方案5】:

          您不能使用 UIImagePickerController 选择多个图像。您要么必须制作自己的自定义图像选择器,要么可以使用像 one 这样的第 3 方。

          【讨论】:

          猜你喜欢
          • 2014-03-12
          • 1970-01-01
          • 2016-11-16
          • 1970-01-01
          • 2016-12-27
          • 1970-01-01
          • 2020-08-15
          • 2023-03-09
          • 2016-06-02
          相关资源
          最近更新 更多