如何使用相机拍照或从照片库中选择图像以便能够在imageView中显示?
对此有任何帮助将不胜感激。
答案 0 :(得分:21)
我在 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
}
}
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)
}
}