我能够点击一个按钮并提起相机卷,然后选择图像并填充空的图像视图。
接下来,我尝试添加一个让用户使用相机的按钮。
我正在遵循一个教程,并且我为两个选项设置了安全规则。但是我仍然遇到
的崩溃应用程序试图呈现模态的活动控制器
我搜索了,发现答案表明我更换了我的行
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)
}
}