iOS_Subhra
8/3/2018 - 11:22 AM

Custome Image Picker

//
//  ARCImagePickerController.swift
//  PrintApp
//
//  Created by Subhr Roy on 03/08/18.
//  Copyright © 2018 Subhr Roy. All rights reserved.
//

import Foundation
import UIKit


/// ImagePickerType Enum
///
/// - Gallery: Gallery Type
/// - Camera: Camera Type
enum ImagePickerType : Int {
    case Gallery
    case Camera
}

/// ARCImagePickerProtocol
/// - Author: Subhra Roy
protocol ARCImagePickerProtocol {
    
    func didFinishPickupAssestWith(pickerController : UIImagePickerController, data : [String : Any]) -> Void
    func didCancelAssestPickupWith(pickerController : UIImagePickerController) -> Void
}

class  ARCImagePickerController : NSObject{
    
    private var  pickerSourceType : ImagePickerType = .Gallery
    private var  pickerDelegate : ARCImagePickerProtocol?
    public  private(set) var imagePicker : UIImagePickerController!
    
    
    /// ARCImagePickerController init()
    ///
    /// - Parameters:
    ///   - pickerType: Type of Picker
    ///   - delegate: UIViewController as delegate instance
    /// - Author: Subhra Roy
    convenience init(pickerType : ImagePickerType, delegate : ARCImagePickerProtocol){
        
        self.init()
        self.pickerSourceType = pickerType
        self.pickerDelegate = delegate
        self.createImagePickerController()
    }
    
    override init(){
        super.init()
       
    }
    
    /// Create Image Picker
    /// - Author: Subhra Roy
    private func createImagePickerController() -> Void{
        
        self.imagePicker = UIImagePickerController()
        self.imagePicker.delegate = self
        self.imagePicker.allowsEditing = true
        
        switch self.pickerSourceType {
            case .Gallery:
                self.imagePicker.sourceType = .photoLibrary
            case .Camera:
                
                if UIImagePickerController.isSourceTypeAvailable(.camera){
                    
                    self.imagePicker.sourceType = .camera
                }else{
                    
                    self.imagePicker.sourceType = .photoLibrary
               }
            
        }
        
    }
    
    deinit {
        print("ARC ImagePicker Dealloc")
    }
    
}
//MArk:--------UIImagePickerController Delegate------------//
extension ARCImagePickerController : UIImagePickerControllerDelegate , UINavigationControllerDelegate{
    
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
       
        //takeImage.image = info[UIImagePickerControllerOriginalImage] as? UIImage
        self.pickerDelegate?.didFinishPickupAssestWith(pickerController: picker, data: info)
    }
    
    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        self.pickerDelegate?.didCancelAssestPickupWith(pickerController: picker)
    }
    
}