ImageVideoPicker.swift 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. //
  2. // ImagePicker.swift
  3. // Qmera
  4. //
  5. // Created by Akhmad Al Qindi Irsyam on 08/09/21.
  6. //
  7. import UIKit
  8. public protocol ImageVideoPickerDelegate: AnyObject {
  9. func didSelect(imagevideo: Any?)
  10. }
  11. open class ImageVideoPicker: NSObject {
  12. private let pickerController: UIImagePickerController
  13. private weak var presentationController: UIViewController?
  14. private weak var delegate: ImageVideoPickerDelegate?
  15. public init(presentationController: UIViewController, delegate: ImageVideoPickerDelegate) {
  16. self.pickerController = UIImagePickerController()
  17. super.init()
  18. self.presentationController = presentationController
  19. self.delegate = delegate
  20. self.pickerController.delegate = self
  21. self.pickerController.allowsEditing = false
  22. }
  23. enum Source {
  24. case imageAlbum
  25. case videoAlbum
  26. case imageCamera
  27. case videoCamera
  28. }
  29. func present(source sourceView: Source) {
  30. if (sourceView == .imageAlbum) {
  31. self.pickerController.mediaTypes = ["public.image"]
  32. self.pickerController.sourceType = .savedPhotosAlbum
  33. self.pickerController.modalPresentationStyle = .custom
  34. self.presentationController?.present(self.pickerController, animated: true)
  35. } else if (sourceView == .videoAlbum) {
  36. self.pickerController.mediaTypes = ["public.movie"]
  37. self.pickerController.sourceType = .savedPhotosAlbum
  38. self.pickerController.videoQuality = .typeHigh
  39. self.pickerController.modalPresentationStyle = .custom
  40. self.presentationController?.present(self.pickerController, animated: true)
  41. } else if (sourceView == .imageCamera) {
  42. self.pickerController.mediaTypes = ["public.image"]
  43. self.pickerController.sourceType = .camera
  44. self.pickerController.modalPresentationStyle = .custom
  45. self.presentationController?.present(self.pickerController, animated: true)
  46. } else if (sourceView == .videoCamera) {
  47. self.pickerController.mediaTypes = ["public.movie"]
  48. self.pickerController.sourceType = .camera
  49. self.pickerController.videoQuality = .typeHigh
  50. self.pickerController.modalPresentationStyle = .custom
  51. self.presentationController?.present(self.pickerController, animated: true)
  52. }
  53. }
  54. private func pickerController(_ controller: UIImagePickerController, didSelect imagevideo: Any?) {
  55. controller.dismiss(animated: false, completion: nil)
  56. self.delegate?.didSelect(imagevideo: imagevideo)
  57. }
  58. }
  59. extension ImageVideoPicker: UIImagePickerControllerDelegate {
  60. public func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
  61. self.pickerController(picker, didSelect: nil)
  62. }
  63. public func imagePickerController(_ picker: UIImagePickerController,
  64. didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]) {
  65. self.pickerController(picker, didSelect: info)
  66. }
  67. }
  68. extension ImageVideoPicker: UINavigationControllerDelegate {
  69. }