如何使用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) } }