如何在Swift中从相机或照片库加载图像

如何使用相机拍摄照片或从照片库中选取图像以便能够在imageView中显示它?

任何帮助,将不胜感激。

我正在使用Swift 3以下

// // DSCameraHandler.swift // // Created by David Seek on 23.04.17. // Copyright © 2016 David Seek. All rights reserved. // import MobileCoreServices import UIKit class DSCameraHandler: NSObject { private let imagePicker = UIImagePickerController() private let isPhotoLibraryAvailable = UIImagePickerController.isSourceTypeAvailable(.photoLibrary) private let isSavedPhotoAlbumAvailable = UIImagePickerController.isSourceTypeAvailable(.savedPhotosAlbum) private let isCameraAvailable = UIImagePickerController.isSourceTypeAvailable(.camera) private let isRearCameraAvailable = UIImagePickerController.isCameraDeviceAvailable(.rear) private let isFrontCameraAvailable = UIImagePickerController.isCameraDeviceAvailable(.front) private let sourceTypeCamera = UIImagePickerControllerSourceType.camera private let rearCamera = UIImagePickerControllerCameraDevice.rear private let frontCamera = UIImagePickerControllerCameraDevice.front var delegate: UINavigationControllerDelegate & UIImagePickerControllerDelegate init(delegate_: UINavigationControllerDelegate & UIImagePickerControllerDelegate) { delegate = delegate_ } func getPhotoLibraryOn(_ onVC: UIViewController, canEdit: Bool) { if !isPhotoLibraryAvailable && !isSavedPhotoAlbumAvailable { return } let type = kUTTypeImage as String if isPhotoLibraryAvailable { imagePicker.sourceType = .photoLibrary if let availableTypes = UIImagePickerController.availableMediaTypes(for: .photoLibrary) { if availableTypes.contains(type) { imagePicker.mediaTypes = [type] imagePicker.allowsEditing = canEdit } } } else if isPhotoLibraryAvailable { imagePicker.sourceType = .savedPhotosAlbum if let availableTypes = UIImagePickerController.availableMediaTypes(for: .savedPhotosAlbum) { if availableTypes.contains(type) { imagePicker.mediaTypes = [type] } } } else { return } imagePicker.allowsEditing = canEdit imagePicker.delegate = delegate onVC.present(imagePicker, animated: true, completion: nil) } func getCameraOn(_ onVC: UIViewController, canEdit: Bool) { if !isCameraAvailable { return } let type1 = kUTTypeImage as String if isCameraAvailable { if let availableTypes = UIImagePickerController.availableMediaTypes(for: .camera) { if availableTypes.contains(type1) { imagePicker.mediaTypes = [type1] imagePicker.sourceType = sourceTypeCamera } } if isRearCameraAvailable { imagePicker.cameraDevice = rearCamera } else if isFrontCameraAvailable { imagePicker.cameraDevice = frontCamera } } else { return } imagePicker.allowsEditing = canEdit imagePicker.showsCameraControls = true imagePicker.delegate = delegate onVC.present(imagePicker, animated: true, completion: nil) } } 

在你想要的ViewController中调用:

 extension ViewController: UINavigationControllerDelegate, UIImagePickerControllerDelegate { func thisIsTheFunctionWeAreCalling() { let camera = DSCameraHandler(delegate_: self) let optionMenu = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet) optionMenu.popoverPresentationController?.sourceView = self.view let takePhoto = UIAlertAction(title: "Take Photo", style: .default) { (alert : UIAlertAction!) in camera.getCameraOn(self, canEdit: true) } let sharePhoto = UIAlertAction(title: "Photo Library", style: .default) { (alert : UIAlertAction!) in camera.getPhotoLibraryOn(self, canEdit: true) } let cancelAction = UIAlertAction(title: "Cancel", style: .cancel) { (alert : UIAlertAction!) in } optionMenu.addAction(takePhoto) optionMenu.addAction(sharePhoto) optionMenu.addAction(cancelAction) self.present(optionMenu, animated: true, completion: nil) } func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { let image = info[UIImagePickerControllerEditedImage] as! UIImage // image is our desired image picker.dismiss(animated: true, completion: nil) } }