Swift 3应用程序试图呈现模样的活动控制器摄像头



我能够点击一个按钮并提起相机卷,然后选择图像并填充空的图像视图。

接下来,我尝试添加一个让用户使用相机的按钮。

我正在遵循一个教程,并且我为两个选项设置了安全规则。但是我仍然遇到

的崩溃

应用程序试图呈现模态的活动控制器

我搜索了,发现答案表明我更换了我的行

present(picker,animated: true,completion: nil)

self.navigationController?.pushViewController(picker, animated: true)

但是,这只是导致另一个错误。

这是我拉动相机的完整代码

picker.allowsEditing = true
picker.sourceType = UIImagePickerControllerSourceType.camera
picker.cameraCaptureMode = .photo
picker.modalPresentationStyle = .fullScreen
present(picker,animated: true,completion: nil)

有什么想法?

编辑

我的代码现在看起来像

func useCamera() {
  let picker = UIImagePickerController()
  picker.delegate = self
  picker.allowsEditing = false
  picker.sourceType = .camera
  present(picker, animated: true, completion: nil)
}

我也尝试了这个

    func useCamera() {
      if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.camera) {
        let picker = UIImagePickerController()
        picker.delegate = self
        picker.allowsEditing = false
        picker.sourceType = .camera
        present(picker, animated: true, completion: nil)
    }
  }

但是现在发生的是它只是打开相机卷,在控制台中我看到了

尝试提出uiimagePickerController:0x1018c4000 on lendend.AddacCountViewController:0x10116f540,其视图不在 窗口层次结构!

但是该应用不会崩溃,这很好

这是我拉动相机的完整代码

mmmmm,不,不是。您一直在指picker。这必然表明某些变量或属性picker 已经存在。因此,还有其他代码初始化该变量,并且可能还有其他代码使用该变量。

,我认为这是问题的根源。不知何故,您已经意外地使用了此视图控制器。该问题源于长期坚持UIImagePickerController。不。这样做的代码总是会遇到问题。只需在使用之前创建一个选择器的实例:

let picker = UIImagePickerController() // *
picker.allowsEditing = true
picker.sourceType = .camera
// picker.cameraCaptureMode = .photo
// picker.modalPresentationStyle = .fullScreen
present(picker,animated: true,completion: nil)

现在,我将向您展示一些实际有效的代码:

let src = UIImagePickerControllerSourceType.camera
guard UIImagePickerController.isSourceTypeAvailable(src) else {print("no camera"); return}
guard let arr = UIImagePickerController.availableMediaTypes(for:src) else {print("no types"); return}
let picker = UIImagePickerController()
picker.mediaTypes = arr
picker.allowsEditing = true
picker.delegate = self
self.present(picker, animated: true)

在您提到的评论中:

我只是将VC嵌入到导航控制器中...没什么疯狂的 - lubberducky4444

我和你有相同的错误,那正是我的问题。

给定导航/视图控制器:

let ccNavController = self.storyboard?.instantiateViewController(withIdentifier: "creditCardNavigationController") as! UINavigationController
guard let ccVC = ccNavController.visibleViewController as? CreditCardViewController else {
    fatalError("Unexpected controller: (String(describing: ccNavController.visibleViewController))")
}

在调用视图控制器本身的present时,我遇到了相同的错误。

self.present(ccVC, animated: true, completion: nil)

当我为导航控制器做present时,它可以使用:

self.present(ccNavController, animated: true, completion: nil)

多亏了@matt,我能够摆脱我的错误。但是最后,我不小心为第二个按钮创建了一个双重ibaction ...

我通过打印按钮1的"左"one_answers"右"来创建一个简单的测试。

当我轻拍左打印的左键时,但是当我敲击右键时,它向左和右打印。

在相机的上下文中...相机会在一段时间前出现,但是由于它正在运行该功能以将相机拉到首先滚动...相机从来没有机会。

有效的代码是这个

  func useCamera() {
    if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.camera) {
      let picker = UIImagePickerController()
      picker.delegate = self
      picker.allowsEditing = true
      picker.sourceType = .camera
      present(picker, animated: true, completion: nil)
  }
}

最新更新