Skip to content

Instantly share code, notes, and snippets.

@sssbohdan
Created May 25, 2017 14:34
Show Gist options
  • Save sssbohdan/b2f7d70ec8c21f3e938b64f82db7ef32 to your computer and use it in GitHub Desktop.
Save sssbohdan/b2f7d70ec8c21f3e938b64f82db7ef32 to your computer and use it in GitHub Desktop.
ImagePickerPresenter
//
// ImagePickerPresenter.swift
//
//
// Created by Bohdan Savych on 5/25/17.
// Copyright © 2017 perpetio. All rights reserved.
//
import UIKit
protocol ImagePickerPresentable: UIImagePickerControllerDelegate, UINavigationControllerDelegate {
func imagePickerPresenter(_ picker: UIImagePickerController, didFinishPicking image: UIImage)
func imagePickerPresenterDidCancel(_ picker: UIImagePickerController)
}
final class ImagePickerPresenter<T: UIViewController>: NSObject, UIImagePickerControllerDelegate, UINavigationControllerDelegate where T: ImagePickerPresentable {
fileprivate weak var delegate: T?
fileprivate lazy var picker = UIImagePickerController()
typealias PickerConfiguration = ((UIImagePickerController) -> Void)
init(delegate: T) {
self.delegate = delegate
super.init()
picker.delegate = self
}
func showImagePicker(type: UIImagePickerControllerSourceType, allowsEditing: Bool = true, animated: Bool = true, pickerConfiguration: PickerConfiguration? = nil) {
picker.sourceType = type
picker.allowsEditing = true
pickerConfiguration?(picker)
delegate?.present(picker, animated: animated, completion: nil)
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
let editedImage = info["UIImagePickerControllerEditedImage"] as? UIImage
let image = info["UIImagePickerControllerOriginalImage"] as? UIImage
delegate?.imagePickerPresenter(picker, didFinishPicking: editedImage ?? image!)
}
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
delegate?.imagePickerPresenterDidCancel(picker)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment