1

我正在尝试使用 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 中设置正确,所以这不是问题。

感谢您的任何帮助,您可以提供!

4

3 回答 3

2

我发现你只需要在调用之前等待“足够长的时间” takePicture,或者它只是默默地失败。对于如何确定始终有效的“足够长”的最小值,我没有一个好的答案,但如果你设置一个计时器并等待五到十秒,你应该没问题。如果它直接从代表或通过代表返回某种“我还没准备好拍照,对不起”错误,那就太好了takePicture,但据我所知,它没有。

于 2009-10-30T07:17:58.450 回答
0

作为对我自己的问题的更新:事实证明,我试图过早地使用 takePicture。当我将操作移动到覆盖层上的按钮并从该按钮发送 takePicture 时(一旦选择器以模态方式呈现),委托方法会按应有的方式触发。我不知道我想要的是否可以实现-无需自动按下该按钮即可拍摄图像-但如果可以,则可能必须在我尝试使用它后的某个时间通过发送 takePicture 来完成。

于 2009-10-30T06:15:51.190 回答
0

-(void)imageMethod:(id)sender{ imagePickerController = [[UIImagePickerController alloc]init]; imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

imagePopover=[[UIPopoverController alloc]initWithContentViewController:imagePickerController];
[imagePopover presentPopoverFromRect:importButton.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES];
}
于 2016-02-05T08:01:29.273 回答