我正在尝试使用 OS 3.1 中的 UIImagePickerController 接口,以及 cameraOverlayView 和 takePicture,但我显然无法理解它是如何工作的,所以我没有得到我想要的行为。
我想要做的是打开相机并自动拍照,而无需让用户与选择器交互或编辑图像。所以我将 UIImagePickerController 子类化(类似于http://github.com/pmark/Helpful-iPhone-Utilities/tree/master/BTL%20Utilities/中的示例)并关闭所有控件:
- (void)displayModalWithController:(UIViewController*)controller animated:(BOOL)animated {
self.sourceType = UIImagePickerControllerSourceTypeCamera;
self.showsCameraControls = NO;
self.navigationBarHidden = YES;
self.toolbarHidden = YES;
// Setting the overlay view up programmatically.
ipView = [[ImagePickerView alloc] init];
self.cameraOverlayView = ipView;
[controller presentModalViewController:self animated:NO];
}
在overlayView 中,我设法强制触发UIImagePickerController 的takePicture 方法(我知道这一点,因为我可以NSLog 它,并且我听到相机拍照的声音)。overlayView 显示得很好。但是,委托方法 didFinishPickingMediaWithInfo: 永远不会被调用,并且 imagePickerControllerDidCancel 也不会被调用。
那么,如何让委托方法被调用,或者通过覆盖 takePicture 方法来保存图片?(我这里不知道怎么抓图片数据,Google好像让我失望了)。我不禁觉得我无法理解 UIImagePickerController 的核心是如何工作的,但是这些文档并没有太大的帮助:
例如:
“您可以提供自定义叠加视图来显示自定义拍照界面,并且您可以从代码中启动拍照。您的自定义叠加视图可以显示为图像提供的默认控件的补充或替代选择器界面。”
或来自 showCameraControls:
“如果将此属性设置为 NO 并提供自己的自定义控件,则可以在关闭图像选择器界面之前拍摄多张照片。” - 如何关闭选择器界面?
注意:代理在 IB 中设置正确,所以这不是问题。
感谢您的任何帮助,您可以提供!