如何使用UIImagePickerControllerDelegate在viewDidLoad上启动相机?

rod*_*ves 5 iphone camera objective-c ios swift

我在Swift中有一个新的iOS应用程序,我试图在应用程序启动后立即显示相机.在我的视图控制器中,我有一个UIView对象,我尝试用相机填充.

在我的视图控制器的代码调用UIImagePickerControllerviewDidLoad方法,但没有任何反应.

这是代码,任何想法为什么没有发生?是不是应该在应用程序启动时使用此代码打开相机?

import UIKit

class ViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate {
    let imagePicker = UIImagePickerController()
    @IBOutlet weak var imageViewer: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()
        if UIImagePickerController.isCameraDeviceAvailable(   UIImagePickerControllerCameraDevice.Front) {
            imagePicker.delegate = self
            imagePicker.sourceType = UIImagePickerControllerSourceType.Camera
            presentViewController(imagePicker, animated: true, completion: nil)
        } else {
            println("no front camera available")
        }

        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage!, editingInfo: [NSObject : AnyObject]!) {
        dismissViewControllerAnimated(true, completion: nil)
        imageViewer.image = image
    }
}
Run Code Online (Sandbox Code Playgroud)

更新:如果我在故事板上添加一个按钮,将其连接到代码并将代码viewDidLoad放入其中,单击按钮时相机将工作:

@IBAction func presentImagePicker(sender: AnyObject) {

    if UIImagePickerController.isCameraDeviceAvailable( UIImagePickerControllerCameraDevice.Front) {
        imagePicker.delegate = self
        imagePicker.sourceType = UIImagePickerControllerSourceType.Camera
        presentViewController(imagePicker, animated: true, completion: nil)
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道相机可以正常工作,但是如何让它无需按下按钮就能正常工作?

Dha*_*esh 11

这是您的解决方案.

viewDidAppear这种方式将代码放入方法中:

override func viewDidAppear(animated: Bool) {

    if UIImagePickerController.isCameraDeviceAvailable( UIImagePickerControllerCameraDevice.Front) {
        imagePicker.delegate = self
        imagePicker.sourceType = UIImagePickerControllerSourceType.Camera
        presentViewController(imagePicker, animated: true, completion: nil)
    }
}
Run Code Online (Sandbox Code Playgroud)

这将在您的应用启动时加载相机.

尝试在viewDidLoad中执行此操作将无法工作,因为在首次创建视图后调用它,并且视图不是该点上任何其他内容的子视图.