首页 > 解决方案 > 拍照后我的 segue 没有执行

问题描述

我正在开发一个使用相机的应用程序,然后照片应该被发送到另一个 ViewController,但我不确定是否可能 segue 无法到达那里或者它只是被执行,但是当我确认我的应用程序崩溃的照片,并且我的日志中没有显示任何错误。

这是相机视图控制器

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。我相信 segue 不应该在那里完成或其他什么,但如果你把它放在代码的另一部分,它会在拍照之前执行。

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.
}



 }

谢谢

标签: iosswift

解决方案


您需要关闭选择器

picker.dismiss(animated:true) {  
  self.performSegue(withIdentifier: "captured", sender: nil)
}

推荐阅读