【问题标题】:Select Multiple Images (UIImagePickerController or Photos.app Share UI)选择多个图像(UIImagePickerController 或 Photos.app 共享 UI)
【发布时间】:2010-11-20 10:44:45
【问题描述】:

在 iPhone OS 3.0 中,Apple 添加了使用“共享”按钮一次共享多张图片并选择多张图片(使用复选标记)的功能。

我很想拥有一个 UIImagePickerController 让用户一次选择多个图像,而不必一张一张地选择。有没有办法做到这一点,还是我必须等到他们添加这个功能?

【问题讨论】:

标签: ios iphone uiimagepickercontroller


【解决方案1】:

如果您仅支持 iOS 14 及更高版本,则可以使用 Apple 的 PHPickerViewController。它允许选择多个图像(而 UIImagePickerController 不允许)。

与上面列出的其他库相比,使用 PHPickerViewController 的另一个好处是用户无需授予访问您的照片库的权限。

【讨论】:

    【解决方案2】:

    在 swift 中试用这个美妙的 API:ImagePicker。与所有其他图像 API 一样,它使用简单,而且更新非常好。

    【讨论】:

    • 很好,但横向模式有问题。
    【解决方案3】:

    1.安装 pod - pod "BSImagePicker", "~> 2.8"

    1. inside info plist add row 隐私 - 照片库使用说明

    3. 将以下代码粘贴到 .swift 文件中-

        import UIKit
        import BSImagePicker
        import Photos
    
        class MultipleImgViC: UIViewController {
    
            @IBOutlet weak var imageView: UIImageView!
            var SelectedAssets = [PHAsset]()
            var photoArray = [UIImage]()
    
    
            override func viewDidLoad() {
                super.viewDidLoad()
    
    
            }
    
    
    
    
            @IBAction func selectImages(_ sender: Any) {
    
                let vc = BSImagePickerViewController()
    
                self.bs_presentImagePickerController(vc, animated: true, select: { (assest: PHAsset) -> Void in
                },
                                                     deselect: { (assest: PHAsset) -> Void in
    
            }, cancel: { (assest: [PHAsset]) -> Void in
    
            }, finish: { (assest: [PHAsset]) -> Void in
    
                for i in 0..<assest.count
                {
                        self.SelectedAssets.append(assest[i])
                }
    
                self.convertAssetToImages()
    
            }, completion: nil)
    
    
        }
    
    
        @IBAction func dismissview(_ sender: Any) {
            dismiss(animated: true, completion: nil)
        }
    
    
    }
    extension MultipleImgViC{
    
        func convertAssetToImages() -> Void {
    
            if SelectedAssets.count != 0{
    
                for i in 0..<SelectedAssets.count{
    
                    let manager = PHImageManager.default()
                    let option = PHImageRequestOptions()
    
                    var thumbnail = UIImage()
    
                    option.isSynchronous = true
    
                    manager.requestImage(for: SelectedAssets[i], targetSize: CGSize(width: 200, height: 200), contentMode: .aspectFill, options: option, resultHandler: {(result,info) -> Void in
                        thumbnail = result!
                    })
    
                    let data = thumbnail.jpegData(compressionQuality: 0.7)
                    let newImage = UIImage(data: data!)
                    self.photoArray.append(newImage! as UIImage)
    
                }
    
                self.imageView.animationImages = self.photoArray
                self.imageView.animationDuration = 3.0
                self.imageView.startAnimating()
            }
    
        }
    
    
    }
    

    注意:- 如果 pod 文件在 Xcode 10.2 中给出“如何修复“不支持 SWIFT_VERSION '3.0',支持的版本是:4.0、4.2、5.0”错误? " 这个错误然后从这个链接解决它:- https://stackoverflow.com/a/55901964/8537648

    视频参考:-https://youtu.be/B1DelPi1L0U

    示例图片:-

    【讨论】:

      【解决方案4】:

      AssetLibrary + UICollectionView ^^

      基本上,使用 StoryBoard,您导入一个UINavigationController,将根控制器更改为UICollectionViewController(将成为您的相册列表),最后添加另一个UICollectionViewController(将成为您的照片列表)。

      然后使用 Assetlibrary 检索用户相册和用户相册内容。

      我一有时间就会做一个这样的组件。

      【讨论】:

      • 你一定很忙。从来没有时间这样做;D
      【解决方案5】:

      你可以像这样使用OpalImagePicker (Swift 4)

       var imagePicker: OpalImagePickerController! 
       imagePicker = OpalImagePickerController()
       imagePicker.imagePickerDelegate = self
       imagePicker.selectionImage = UIImage(named: "aCheckImg")
       imagePicker.maximumSelectionsAllowed = 3 // Number of selected images
       present(imagePicker, animated: true, completion: nil)
      

      然后实现它的委托:

      func imagePickerDidCancel(_ picker: OpalImagePickerController) {
              //Cancel action
      }
      
      func imagePicker(_ picker: OpalImagePickerController, didFinishPickingImages images: [UIImage]) {
      }
      

      【讨论】:

        【解决方案6】:

        这样怎么样:

        1. 先打开“photos.app”,选择多张照片,复制;

        2. 在您自己的应用程序中,尝试检索那些副本照片;

        我知道有一些应用程序是这样做的,但不知道如何实现第 2 步。

        【讨论】:

        • 您只能在“信息”和“邮件”中粘贴照片。
        猜你喜欢
        • 2012-10-17
        • 1970-01-01
        • 2017-10-30
        • 1970-01-01
        • 1970-01-01
        • 2023-03-09
        • 2021-01-19
        • 1970-01-01
        相关资源
        最近更新 更多