PhotoAndCameraManager.swift 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. //
  2. // PhotoManager.swift
  3. // CreaditPayment
  4. //
  5. // Created by 南鑫林 on 2018/12/19.
  6. // Copyright © 2018 南鑫林. All rights reserved.
  7. //
  8. import UIKit
  9. import SwiftyMediator
  10. class PhotoAndCameraManager: NSObject {
  11. private static let _sharedInstance = PhotoAndCameraManager()
  12. private override init() {} // 私有化init方法
  13. class func shared() -> PhotoAndCameraManager {
  14. return _sharedInstance
  15. }
  16. typealias PhotoAndCameraManagerImageBlock = (_ image: UIImage) -> Void
  17. var photoAndCameraManagerImageBlock : PhotoAndCameraManagerImageBlock?
  18. var isEditedImage : Bool = true
  19. /// 相册
  20. func authorizePhoto() {
  21. weak var weakself = self
  22. LBXPermissions.authorizePhotoWith { (granted) in
  23. if granted {
  24. let picker = UIImagePickerController()
  25. picker.sourceType = UIImagePickerController.SourceType.photoLibrary
  26. picker.delegate = weakself
  27. picker.allowsEditing = weakself?.isEditedImage ?? true
  28. picker.navigationController?.navigationBar.isTranslucent = false
  29. if #available(iOS 11.0, *) {
  30. UIScrollView.appearance().contentInsetAdjustmentBehavior = .automatic
  31. } else {
  32. if self.responds(to: #selector(setter: picker.automaticallyAdjustsScrollViewInsets)) {
  33. picker.automaticallyAdjustsScrollViewInsets = true
  34. }
  35. }
  36. picker.modalPresentationStyle = .fullScreen
  37. UIViewController.topMost?.present(picker, animated: true, completion: nil)
  38. } else {
  39. LBXPermissions.jumpToSystemPrivacySetting()
  40. }
  41. }
  42. }
  43. /// 相机
  44. func authorizeCamera() {
  45. weak var weakself = self
  46. LBXPermissions.authorizeCameraWith { (granted) in
  47. if granted {
  48. let picker = UIImagePickerController()
  49. picker.sourceType = UIImagePickerController.SourceType.camera
  50. picker.delegate = weakself
  51. picker.allowsEditing = weakself?.isEditedImage ?? true
  52. picker.navigationController?.navigationBar.isTranslucent = false
  53. if #available(iOS 11.0, *) {
  54. UIScrollView.appearance().contentInsetAdjustmentBehavior = .automatic
  55. } else {
  56. if self.responds(to: #selector(setter: picker.automaticallyAdjustsScrollViewInsets)) {
  57. picker.automaticallyAdjustsScrollViewInsets = true
  58. }
  59. }
  60. picker.modalPresentationStyle = .fullScreen
  61. UIViewController.topMost?.present(picker, animated: true, completion: nil)
  62. } else {
  63. LBXPermissions.jumpToSystemPrivacySetting()
  64. }
  65. }
  66. }
  67. }
  68. extension PhotoAndCameraManager : UIImagePickerControllerDelegate,UINavigationControllerDelegate {
  69. func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
  70. if #available(iOS 11.0, *) {
  71. UIScrollView.appearance().contentInsetAdjustmentBehavior = .never
  72. } else {
  73. if self.responds(to: #selector(setter: picker.automaticallyAdjustsScrollViewInsets)) {
  74. picker.automaticallyAdjustsScrollViewInsets = false
  75. }
  76. }
  77. //查看info对象
  78. //显示的图片
  79. var image : UIImage? = info[.editedImage] as? UIImage
  80. if (image == nil ) {
  81. image = info[.originalImage] as? UIImage
  82. return
  83. }
  84. if self.isEditedImage {
  85. //获取编辑后的图片
  86. image = info[.editedImage] as? UIImage
  87. }else{
  88. //获取选择的原图
  89. image = info[.originalImage] as? UIImage
  90. }
  91. //图片控制器退出
  92. picker.dismiss(animated: true, completion: {
  93. [weak self] () -> Void in
  94. if self?.photoAndCameraManagerImageBlock != nil {
  95. self?.photoAndCameraManagerImageBlock!(image!)
  96. }
  97. })
  98. }
  99. func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
  100. if #available(iOS 11.0, *) {
  101. UIScrollView.appearance().contentInsetAdjustmentBehavior = .never
  102. } else {
  103. if self.responds(to: #selector(setter: picker.automaticallyAdjustsScrollViewInsets)) {
  104. picker.automaticallyAdjustsScrollViewInsets = false
  105. }
  106. }
  107. //图片控制器退出
  108. picker.dismiss(animated: true, completion: {() -> Void in})
  109. }
  110. }