ios - 拍照后我的 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.
}
}
谢谢
解决方案
您需要关闭选择器
picker.dismiss(animated:true) {
self.performSegue(withIdentifier: "captured", sender: nil)
}
推荐阅读
- reactjs - npm 启动错误 - React.js
- sql-server - 触发从 SQL Server 到 Azure 事件中心的事件
- excel - excel中的SUM,其中单元格由其他单元格用公式指定
- google-bigquery - BigQuery:使用流式 API 更新多个架构字段后无法插入新值
- javascript - 试图将从空气表中提取的数据连接到 gatsby graphql 到 algolia,插件不起作用
- python - 节点被两次添加到列表中
- c++ - 通过 unique_ptr 访问 std::array
- laravel - 我应该在 Laravel Horizon 中使用多少个进程?
- c# - WPF 滚动视图用户控件
- elasticsearch - 弹性搜索:查询字符串和数字并不总是返回想要的结果