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)
}
}
我可以启动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)
}
}