Я использую следующие для 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)
}
}
Я отправил ответ для вас, но вы получаете все downvotes, потому что это не сайт для «кода для вас». вы должны предоставить код, и мы помогаем вам находить ошибки и улучшать ваш код. поэтому в следующий раз попробуйте решения Google и получите помощь, если вы застрянете. пока: я опубликовал полностью функциональный вариант для вас. получайте удовольствие –
Я понимаю, что для меня это не место для людей, я просто прошу указать какие-то указания относительно того, где я могу начать. Я не ожидаю, что кто-нибудь напишет это для меня, хотя я ценю ваш ответ. –
Я не хотел обидеть вас или что-то в этом роде. просто хотел сказать вам, почему вы все проголосовали. у меня есть надпись, так что это будет не так уж плохо, и если моя работа поможет вам, я буду рад ответить на ваш вопрос, чтобы вы могли это проверить. если вам нужна дополнительная помощь, просто дайте мне знать. –