我的imagePickerController didFinishPickingMediaWithInfo更新被称为

时间:2016-03-08 11:41:17

标签: ios xcode swift camera

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

它似乎工作正常,但我的imagePickerController didFinishPickingMediaWithInfo更新得到调用。我收到来自Xcode的错误消息“快照未呈现的视图导致空快照。确保您的视图在屏幕更新后的快照或快照之前至少呈现一次。”听起来像这可能是问题所在,我用谷歌搜索了它,但没有更明智。很多人都认为这是一个Apple bug,我没有发现任何人提供解决方案。

所以有人知道是不是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!")
    }
}

1 个答案:

答案 0 :(得分:0)

之后

picker.delegate = self

picker = UIImagePickerController()

还使用UIImagePickerControllerDelegate委托继承您的类。

它会起作用。