Skip to content

Instantly share code, notes, and snippets.

@tobitech
Created July 24, 2018 10:16
Show Gist options
  • Save tobitech/121cf225e3ddd62e16cc26998a4b46e1 to your computer and use it in GitHub Desktop.
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
//
// 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