Created
July 24, 2018 10:16
-
-
Save tobitech/121cf225e3ddd62e16cc26998a4b46e1 to your computer and use it in GitHub Desktop.
A simple class abstracting display of photo, video selection or capture from user's device
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// Camera.swift | |
// Tobi Omotayo | |
// | |
// Created by Oluwatobi Omotayo on 20/07/2018. | |
// Copyright © 2018 Oluwatobi Omotayo. All rights reserved. | |
// | |
import UIKit | |
import MobileCoreServices | |
class Camera { | |
var delegate: UIImagePickerControllerDelegate & UINavigationControllerDelegate | |
init(delegate_: UIImagePickerControllerDelegate & UINavigationControllerDelegate) { | |
delegate = delegate_ | |
} | |
func PresentPhotoLibrary(target: UIViewController, canEdit: Bool) { | |
if !UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.photoLibrary) && !UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.savedPhotosAlbum) { | |
return | |
} | |
let type = kUTTypeImage as String | |
let imagePicker = UIImagePickerController() | |
if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) { | |
imagePicker.sourceType = .photoLibrary | |
if let availableTypes = UIImagePickerController.availableMediaTypes(for: .photoLibrary) { | |
if (availableTypes as NSArray).contains(type) { | |
/* Set up defaults */ | |
imagePicker.mediaTypes = [type] | |
imagePicker.allowsEditing = canEdit | |
} | |
} | |
} else if UIImagePickerController.isSourceTypeAvailable(.savedPhotosAlbum) { | |
imagePicker.sourceType = .savedPhotosAlbum | |
if let availableTypes = UIImagePickerController.availableMediaTypes(for: .savedPhotosAlbum) { | |
if (availableTypes as NSArray).contains(type) { | |
imagePicker.mediaTypes = [type] | |
} | |
} | |
} else { | |
return | |
} | |
imagePicker.allowsEditing = canEdit | |
imagePicker.delegate = delegate | |
target.present(imagePicker, animated: true, completion: nil) // presents the imagepicker to the user | |
return | |
} | |
func PresentMultyCamera(target: UIViewController, canEdit: Bool) { | |
if !UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.camera) { | |
return | |
} | |
let type1 = kUTTypeImage as String | |
let type2 = kUTTypeMovie as String | |
let imagePicker = UIImagePickerController() | |
if UIImagePickerController.isSourceTypeAvailable(.camera) { | |
if let availableTypes = UIImagePickerController.availableMediaTypes(for: .camera) { | |
if (availableTypes as NSArray).contains(type1) { | |
imagePicker.mediaTypes = [type1, type2] | |
imagePicker.sourceType = UIImagePickerControllerSourceType.camera | |
} | |
} | |
if UIImagePickerController.isCameraDeviceAvailable(.rear) { | |
imagePicker.cameraDevice = UIImagePickerControllerCameraDevice.rear | |
} | |
else if UIImagePickerController.isCameraDeviceAvailable(.front) { | |
imagePicker.cameraDevice = UIImagePickerControllerCameraDevice.front | |
} | |
} else { | |
//show alert, no camera available | |
return | |
} | |
imagePicker.allowsEditing = canEdit | |
imagePicker.showsCameraControls = true | |
imagePicker.delegate = delegate | |
target.present(imagePicker, animated: true, completion: nil) // presents the imagepicker to the user | |
} | |
func PresentPhotoCamera(target: UIViewController, canEdit: Bool) { | |
if !UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.camera) { | |
return | |
} | |
let type1 = kUTTypeImage as String | |
let imagePicker = UIImagePickerController() | |
if UIImagePickerController.isSourceTypeAvailable(.camera) { | |
if let availableTypes = UIImagePickerController.availableMediaTypes(for: .camera) { | |
if (availableTypes as NSArray).contains(type1) { | |
imagePicker.mediaTypes = [type1] | |
imagePicker.sourceType = UIImagePickerControllerSourceType.camera | |
} | |
} | |
if UIImagePickerController.isCameraDeviceAvailable(.rear) { | |
imagePicker.cameraDevice = UIImagePickerControllerCameraDevice.rear | |
} | |
else if UIImagePickerController.isCameraDeviceAvailable(.front) { | |
imagePicker.cameraDevice = UIImagePickerControllerCameraDevice.front | |
} | |
} else { | |
//show alert, no camera available | |
return | |
} | |
imagePicker.allowsEditing = canEdit | |
imagePicker.showsCameraControls = true | |
imagePicker.delegate = delegate | |
target.present(imagePicker, animated: true, completion: nil) // presents the imagepicker to the user | |
} | |
// Video Camera | |
func PresentVideoCamera(target: UIViewController, canEdit: Bool) { | |
if !UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.camera) { | |
return | |
} | |
let type1 = kUTTypeMovie as String | |
let imagePicker = UIImagePickerController() | |
if UIImagePickerController.isSourceTypeAvailable(.camera) { | |
if let availableTypes = UIImagePickerController.availableMediaTypes(for: .camera) { | |
if (availableTypes as NSArray).contains(type1) { | |
imagePicker.mediaTypes = [type1] | |
imagePicker.sourceType = UIImagePickerControllerSourceType.camera | |
// imagePicker.videoMaximumDuration = kMAXDURATION | |
} | |
} | |
if UIImagePickerController.isCameraDeviceAvailable(.rear) { | |
imagePicker.cameraDevice = UIImagePickerControllerCameraDevice.rear | |
} | |
else if UIImagePickerController.isCameraDeviceAvailable(.front) { | |
imagePicker.cameraDevice = UIImagePickerControllerCameraDevice.front | |
} | |
} else { | |
//show alert, no camera available | |
return | |
} | |
imagePicker.allowsEditing = canEdit | |
imagePicker.showsCameraControls = true | |
imagePicker.delegate = delegate | |
target.present(imagePicker, animated: true, completion: nil) // presents the imagepicker to the user | |
} | |
//video library | |
func PresentVideoLibrary(target: UIViewController, canEdit: Bool) { | |
if !UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.photoLibrary) && !UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.savedPhotosAlbum) { | |
return | |
} | |
let type = kUTTypeMovie as String | |
let imagePicker = UIImagePickerController() | |
// imagePicker.videoMaximumDuration = kMAXDURATION | |
if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) { | |
imagePicker.sourceType = .photoLibrary | |
if let availableTypes = UIImagePickerController.availableMediaTypes(for: .photoLibrary) { | |
if (availableTypes as NSArray).contains(type) { | |
/* Set up defaults */ | |
imagePicker.mediaTypes = [type] | |
imagePicker.allowsEditing = canEdit | |
} | |
} | |
} else if UIImagePickerController.isSourceTypeAvailable(.savedPhotosAlbum) { | |
imagePicker.sourceType = .savedPhotosAlbum | |
if let availableTypes = UIImagePickerController.availableMediaTypes(for: .savedPhotosAlbum) { | |
if (availableTypes as NSArray).contains(type) { | |
imagePicker.mediaTypes = [type] | |
} | |
} | |
} else { | |
return | |
} | |
imagePicker.allowsEditing = canEdit | |
imagePicker.delegate = delegate | |
target.present(imagePicker, animated: true, completion: nil) // presents the imagepicker to the user | |
return | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment