How can I ensure that the photo picked by imagePickerController and camera goes into DetailViewController UIImage?

57 views Asked by At

Image user picks in UIImagePickerController and camera both not working. Where is the [assert] bug coming from?

Here is my Code :

ViewController :

import UIKit

class ViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate {
    @IBOutlet var takePicture: UIButton!
    @IBOutlet var editPhoto: UIButton!
    
    var pictures = [String]()
    
    @IBAction func takePicture(_ sender: UIButton) {
        camera()
        if let vb = storyboard?.instantiateViewController(withIdentifier: "Detail") as? DetailViewController {
            navigationController?.pushViewController(vb, animated: true)
    }
        presentingViewController?.dismiss(animated: true, completion: actionClose)
    }
    
    @IBAction func editPhoto(_ sender: UIButton) {
        photoGallery()
        if let vc = storyboard?.instantiateViewController(withIdentifier: "Detail") as? DetailViewController {
            navigationController?.pushViewController(vc, animated: true)
            self.dismiss(animated: true)
    }
        presentingViewController?.dismiss(animated: true, completion: nil)
    }
    
    func camera() {
        let vc = UIImagePickerController()
        vc.sourceType = .camera
        vc.allowsEditing = true
        vc.delegate = self
        present(vc, animated: true)
        actionClose()
    }
    
    @objc func photoGallery() {
        let picker = UIImagePickerController()
        picker.allowsEditing = true
        picker.delegate = self
        present(picker, animated: true)
        actionClose()
    }

    @objc func actionClose() {
       presentingViewController?.dismiss(animated: true)
     }
    
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        
    }


}

DetailViewController :

import UIKit
import CoreImage

class DetailViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

    @IBOutlet var imageView: UIImageView!
    @IBOutlet var slider1: UISlider!
    @IBOutlet var slider2: UISlider!
    @IBOutlet var slider3: UISlider!
    @IBOutlet var slider4: UISlider!
    var currentImage: UIImage!
    
    var context: CIContext!
    var currentFilter: CIFilter!
    
    var selectedImage: String?
    override func viewDidLoad() {
        super.viewDidLoad()
        title = "Photo Editor"
        
        context = CIContext()
        currentFilter = CIFilter(name: "CISepiaTone")
    }
    
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        guard let image = info[.editedImage] as? UIImage else { return }
        dismiss(animated: true)
        print("No image found")
        currentImage = image
        
        let beginImage = CIImage(image: currentImage)
        currentFilter.setValue(beginImage, forKey:kCIInputImageKey)
        
        applyProcessing()
    }
    
    func applyProcessing() {
        let inputKeys = currentFilter.inputKeys
        
        if let cgimg = context.createCGImage(currentFilter.outputImage!, from: currentFilter.outputImage!.extent) {
            let processedImage = UIImage(cgImage: cgimg)
            self.imageView.image = processedImage
        }
    }
}

Thank you, hoping you can help.

1

There are 1 answers

5
Zeeshan Ahmad II On

the error part is

here you present camera and push to DetailViewController at the same time change your code to this

 @IBAction func takePicture(_ sender: UIButton) {
        camera() //do this only
  }


    @IBAction func editPhoto(_ sender: UIButton) {
      //remove open photo gallery
        if let vc = storyboard?.instantiateViewController(withIdentifier: "Detail") as? DetailViewController {
        navigationController?.pushViewController(vc, animated: true)
        self.dismiss(animated: true)
       }
      presentingViewController?.dismiss(animated: true, completion: nil)
    }