【问题标题】:Camera photo selection not working in Swift相机照片选择在 Swift 中不起作用
【发布时间】:2017-01-19 20:09:53
【问题描述】:

当用户拍照并点击使用照片按钮时,为什么不调用第二个函数?视图被关闭,但打印语句不起作用并且函数未被调用。

@IBAction func openCamera(_ sender: UIBarButtonItem)
    {
        if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.camera) {
            let imagePicker = UIImagePickerController()
            imagePicker.delegate = self
            imagePicker.sourceType = UIImagePickerControllerSourceType.camera;
            imagePicker.allowsEditing = false
            self.present(imagePicker, animated: true, completion: nil)
        }
    }

func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage!, editingInfo: [NSObject : AnyObject]!) {
        print("made it")
        createImage(image: image)
        self.dismiss(animated: true, completion: nil);
    }

【问题讨论】:

  • 您是否将视图设为委托?你有 imagePicker.delegate = self 某处(可能是 viewDidLoad)吗?
  • 在第一种方法@dfd
  • 抱歉,错过了。我看到的唯一另一件事是这是您的第二次覆盖。你在使用 Swift 3 吗?如果是这样,那就是 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
  • 是的,我正在使用 swift 3。谢谢@dfd
  • 我会将我的代码放入答案中。据我所知,你现在几乎是正确的。

标签: ios swift function camera uiimagepickercontroller


【解决方案1】:

使用 Swift 3,这就是我所拥有的。我的代码意味着有(1)一个选择视图控制器,它使用 UIImagePickerController 来使用相机或从相机胶卷中选择,然后(2)一个编辑视图控制器的续集我去掉了按钮的代码,如我没有使用 IB。

class SelectViewController: UIViewController {

    // selection and pass to editor

    let picker = ImagePickerController()
    var image = UIImage()

    override func viewDidLoad() {
        super.viewDidLoad()
        picker.delegate = self
    }

extension SelectViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate {

    // MARK: Camera App

    func openCameraApp() {
        if UIImagePickerController.availableCaptureModes(for: .rear) != nil {
            picker.allowsEditing = false
            picker.sourceType = UIImagePickerControllerSourceType.camera
            picker.cameraCaptureMode = .photo
            picker.modalPresentationStyle = .fullScreen
            present(picker,
                    animated: true,
                    completion: nil)
        } else {
            noCamera()
        }
    }
    func noCamera(){
        let alertVC = UIAlertController(
            title: "No Camera",
            message: "Sorry, this device has no camera",
            preferredStyle: .alert)
        let okAction = UIAlertAction(
            title: "OK",
            style:.default,
            handler: nil)
        alertVC.addAction(okAction)
        present(
            alertVC,
            animated: true,
            completion: nil)
    }

    // MARK: Photos Albums

    func showImagePicker() {
        picker.allowsEditing = false
        picker.sourceType = .photoLibrary
        present(picker,
                animated: true,
                completion: nil)
        picker.popoverPresentationController?.sourceView = self.view
    }
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        let chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage
        image = chosenImage
        self.performSegue(withIdentifier: "ShowEditView", sender: self)
        dismiss(animated: true, completion: nil)
    }
    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        dismiss(animated: false, completion: nil)
    }

    // MARK: Seque to EditViewController

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "ShowEditView" {
            if let vc = segue.destination as? EditViewController {
                vc.image = image
            }
        }
    }

}

如果您没有转入另一个 VC,请删除 .performSegue 调用和最后 MARK: 符号下方的代码。 (相机/所选图像在 image 变量中。)

【讨论】:

    猜你喜欢
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-31
    • 1970-01-01
    • 2013-07-23
    • 2016-08-18
    • 2015-12-21
    相关资源
    最近更新 更多