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

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

我的视图控制器中的代码在viewDidLoad方法中调用UIImagePickerController ,但没有任何反应。

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

 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 } } 

更新 :如果我添加一个button到故事板,连接到代码,并把viewDidLoad中的代码放在里面,相机在点击button时工作:

 @IBAction func presentImagePicker(sender: AnyObject) { if UIImagePickerController.isCameraDeviceAvailable( UIImagePickerControllerCameraDevice.Front) { imagePicker.delegate = self imagePicker.sourceType = UIImagePickerControllerSourceType.Camera presentViewController(imagePicker, animated: true, completion: nil) } } 

我知道,相机的作品,但如何使其工作,而不必按下button?

这是你的解决scheme。

把你的代码放在viewDidAppear方法中:

 override func viewDidAppear(animated: Bool) { if UIImagePickerController.isCameraDeviceAvailable( UIImagePickerControllerCameraDevice.Front) { imagePicker.delegate = self imagePicker.sourceType = UIImagePickerControllerSourceType.Camera presentViewController(imagePicker, animated: true, completion: nil) } } 

这将在您的应用程序启动时加载相机。

尝试在viewDidLoad中执行此操作将不起作用,因为在第一次创build视图之后调用该视图,并且此视图不是此时其他任何内容的子视图。

 override func viewDidLoad() { if UIImagePickerController.isCameraDeviceAvailable( UIImagePickerControllerCameraDevice.Front) { imagePicker.delegate = self imagePicker.sourceType = UIImagePickerControllerSourceType.Camera presentViewController(imagePicker, animated: true, completion: nil) } }