Мой снимок не выполняется после съемки - PullRequest
0 голосов
/ 19 октября 2019

Я занимаюсь разработкой приложения, в котором используется камера, и затем предполагается, что фотография будет отправлена ​​на другой ViewController, но я не уверен, что, возможно, это не удастся или она просто будет выполнена, но когда я подтверждаю фотографию, мое приложение рухнуло, и в моем журнале не отображаются ошибки.

Это контроллер просмотра камеры

import UIKit
import AVFoundation
class ViewController: UIViewController , 
UIImagePickerControllerDelegate, UINavigationControllerDelegate{

var img = UIImageView()

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

@IBAction func photo(_ sender: Any) {
    checkCameraPermissions()
}


private func checkCameraPermissions() {
    let status = AVCaptureDevice.authorizationStatus(for: .video)
    switch status {
    case .authorized:
        print("1")
        presentPicker()
    case .notDetermined:
        print("2")
        askPermision()
    case .denied:
        print("3")
        // user denied access
        self.permissionDenied()
    case .restricted:
        print("Error restricted")
    }
}

private func presentPicker() {
    if UIImagePickerController.isSourceTypeAvailable(UIImagePickerController.SourceType.camera) {
        let imagePicker = UIImagePickerController()
        imagePicker.delegate = self
        imagePicker.sourceType = UIImagePickerController.SourceType.camera
        imagePicker.allowsEditing = false
        self.present(imagePicker, animated: true, completion: nil)
    }


}

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    if let pickedImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage{
        img.image = pickedImage
    }
    performSegue(withIdentifier: "captured", sender: nil)

}

private func askPermision(){
    AVCaptureDevice.requestAccess(for: AVMediaType.video) {granted in
        if granted {
            self.presentPicker()
        } else {
            print("Denied")
        }
    }
}

private func permissionDenied() {
    let alert = UIAlertController(title: "Access to camera is denied", message: "You have denied the access to the camera. Would you like to able it?", preferredStyle: .alert)
    let actionOK = UIAlertAction(title: "Ok", style: .default) { (UIAlertAction) in
        self.askPermision()
    }
    let cancel = UIAlertAction(title: "Cancel", style: .default) { (action) in
        print("Cancel")
    }
    alert.addAction(actionOK)
    alert.addAction(cancel)
    present(alert, animated : true, completion: nil)
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if(segue.identifier == "captured"){
        let vc = segue.destination as! ImageReportedVC
        vc.imgAux = img.image!
    }
}
}

И затем, это второй VC, который нене появляется. Я считаю, что переход не должен быть сделан там или что-то, но если вы вставите это в другую часть кода, он выполняется перед тем, как сделать фотографию.

import UIKit

class ImageReportedVC: UIViewController {

var imgAux = UIImage()


@IBOutlet weak var imgReported: UIImageView!
override func viewDidLoad() {
    super.viewDidLoad()

    imgReported.image = imgAux
    // Do any additional setup after loading the view.
}



 }

Спасибо

1 Ответ

0 голосов
/ 19 октября 2019

Вам нужно уволить сборщика

picker.dismiss(animated:true) {  
  self.performSegue(withIdentifier: "captured", sender: nil)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...