我的 uiimagePickerController didFinishPickingMediaWithInfo 永远不会被调用

My imagePickerController didFinishPickingMediaWithInfo newer get called

我尝试编写一个需要可以拍摄多张照片的屏幕的应用程序。我使用了 http://makeapppie.com/2015/11/04/how-to-make-xib-based-custom-uiimagepickercontroller-cameras-in-swift/.

中的代码示例

它似乎工作正常,但我的 imagePickerController didFinishPickingMediaWithInfo 更新被调用。我从 Xcode "Snapshotting a view that has not been rendered results in an empty snapshot. Ensure your view has been rendered at least once before snapshotting or snapshot after screen updates." 收到一条错误消息,我觉得这可能是问题所在,我用谷歌搜索了它,但没有得到任何明智的结果。很多人认为这是一个 Apple 错误,但我还没有找到任何人提供解决方案。

所以有人知道我的问题是否是 Xcode 错误吗,在那种情况下有解决方案还是我在代码中写错了:

import UIKit

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate, CustomOverlayDelegate {
    var picker = UIImagePickerController()

    @IBAction func shootPhoto(sender: AnyObject) {
        if UIImagePickerController.availableCaptureModesForCameraDevice(.Rear) != nil {
            picker = UIImagePickerController() //make a clean controller
            picker.allowsEditing = false
            picker.sourceType = UIImagePickerControllerSourceType.Camera
            picker.cameraCaptureMode = .Photo
            picker.showsCameraControls = false

            //customView stuff
            let customViewController = CustomOverlayViewController(
                nibName:"CustomOverlayViewController",
                bundle: nil
            )
            let customView:CustomOverlayView = customViewController.view as! CustomOverlayView
            customView.frame = self.picker.view.frame
            customView.cameraLabel.text = "Hello Cute Camera"
            customView.delegate = self

            //presentation of the camera
            picker.modalPresentationStyle = .FullScreen
            presentViewController(picker, animated: true,completion: {
                self.picker.cameraOverlayView = customView
            })

        } else { //no camera found -- alert the user.
            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)
            presentViewController(
                alertVC,
                animated: true,
                completion: nil)
        }
    }

    func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
        print("didFinishPickingMediaWithInfo")
        let chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage //get the image from info
        UIImageWriteToSavedPhotosAlbum(chosenImage, self,nil, nil) //save to the photo library
    }

    //What to do if the image picker cancels.
    func imagePickerControllerDidCancel(picker: UIImagePickerController) {
        dismissViewControllerAnimated(true, completion: nil)
    }

    //MARK: Custom View Delegates
    func didCancel(overlayView:CustomOverlayView) {
        picker.dismissViewControllerAnimated(true, completion: nil)
        print("dismissed!!")
    }
    func didShoot(overlayView:CustomOverlayView) {
        picker.takePicture()
        overlayView.cameraLabel.text = "Shot Photo"
        print("Shot Photo")
    }
    func weAreDone(overlayView: CustomOverlayView) {
        picker.dismissViewControllerAnimated(true,
            completion: nil)
        print("We are done!")
    }
}

picker.delegate = self

之后

picker = UIImagePickerController()

也用 UIImagePickerControllerDelegate 委托继承你class。

它会起作用。