UIImagePickerController - 在相机视图中选择保存的图像

UIImagePickerController - Choose saved images in the camera view

我可以启动UIImagePickerController拍照了:

func selectCamera(){
    if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera) {
        let imagePicker = UIImagePickerController()
        imagePicker.delegate = self
        imagePicker.sourceType = UIImagePickerControllerSourceType.Camera;
        imagePicker.allowsEditing = true
        self.presentViewController(imagePicker, animated: true, completion: nil)
    }
}

并使用此功能从保存的图片中选择:

func selectPicture() {
    let picker = UIImagePickerController()
    picker.allowsEditing = true
    picker.delegate = self
    presentViewController(picker, animated: true, completion: nil)
}

我可以从 phone 上的图片库中选择一张图片,也可以拍照。

但我想在相机视图中选择一张已保存的图库图片,它在标准相机应用程序中的表现如何。这可能吗?

如果您想在相机视图中显示图库图片,您必须创建一个自定义的 cameraOverlay 视图,它有一个按钮可以打开保存的图片。

为了让它更快,你可以使用像 --> https://github.com/GabrielAlva/Cool-iOS-Camera

这样的库

你也可以有一个动作sheet,要求用户select他想要哪个选项。

检查这个 -> How to allow the user to pick a photo from his camera roll or photo library? & 这个 --> https://github.com/chroman/CRMediaPickerController

我正在使用这个解决方案,没有额外的库。 首先不要忘记委托、UIImagePickerControllerDelegate 和导航委托。只有 imagePickerController 需要的东西。

更新,检查函数saveImageViewToAlbum,确保你的imageView包含图像,否则你可能会捕获异常。将照片添加到已保存的相册。可选的 completionSelector 应具有以下形式:

- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo;

刚刚创建了这个项目,在 swift、iOS 9.3

上一切正常
    import UIKit

    class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

    @IBOutlet weak var choosenImageView: UIImageView!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func openAlbum(sender: UIButton) {
        let imagePickerController = UIImagePickerController()
        imagePickerController.delegate = self
        imagePickerController.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
        self .presentViewController(imagePickerController, animated: true, completion: nil)

    }
    func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) {

        choosenImageView.image = image
        self .dismissViewControllerAnimated(true, completion: nil)
    } 
@IBAction func saveImageViewToAlbum(sender: UIButton) {
                UIImageWriteToSavedPhotosAlbum(choosenImageView.image!, nil, nil, nil)
    }
}