Skip to content

Instantly share code, notes, and snippets.

@SiarheiFedartsou
Created September 11, 2017 14:55
Show Gist options
  • Save SiarheiFedartsou/2bb8b0fa01b8d103fe1466db7c686dfb to your computer and use it in GitHub Desktop.
Save SiarheiFedartsou/2bb8b0fa01b8d103fe1466db7c686dfb to your computer and use it in GitHub Desktop.
import UIKit
fileprivate class ImageSelectionController: NSObject {
static let shared = ImageSelectionController()
fileprivate var completionHandler: (UIImage?) -> Void = { _ in }
func selectImage(with sourceType: UIImagePickerControllerSourceType, in viewController: UIViewController, completionHandler: @escaping (UIImage?) -> Void) {
guard UIImagePickerController.isSourceTypeAvailable(sourceType) else {
completionHandler(nil)
return
}
self.completionHandler = completionHandler
let imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = sourceType
imagePicker.allowsEditing = true
viewController.present(imagePicker, animated: true, completion: nil)
}
}
extension ImageSelectionController: UIImagePickerControllerDelegate, UINavigationControllerDelegate {
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
defer {
picker.dismiss(animated: true, completion: nil)
}
if let pickedImage = info[UIImagePickerControllerEditedImage] as? UIImage {
completionHandler(pickedImage)
} else {
completionHandler(nil)
}
completionHandler = { _ in }
}
}
protocol ImageSelectionRouter: NavigationRouter {
func moveToImageSelection(completionHandler: @escaping (UIImage?) -> Void)
}
extension ImageSelectionRouter {
func moveToImageSelection(completionHandler: @escaping (UIImage?) -> Void) {
let alertController = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)
alertController.addAction(UIAlertAction(title: L10n.profileGetGalleryImage, style: .default, handler: { _ in
ImageSelectionController.shared.selectImage(with: .photoLibrary, in: self.navigationController, completionHandler: completionHandler)
}))
alertController.addAction(UIAlertAction(title: L10n.profileGetCameraImage, style: .default, handler: { _ in
ImageSelectionController.shared.selectImage(with: .camera, in: self.navigationController, completionHandler: completionHandler)
}))
alertController.addAction(UIAlertAction(title: L10n.cancel, style: .cancel, handler: { _ in
completionHandler(nil)
}))
navigationController.present(alertController, animated: true, completion: nil)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment