【问题标题】:iPhone: taking a picture programmaticallyiPhone:以编程方式拍照
【发布时间】:2010-12-11 11:09:05
【问题描述】:

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

感谢您提供的任何帮助!

【问题讨论】:

    标签: iphone uiimagepickercontroller iphone-sdk-3.1


    【解决方案1】:

    -(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];
    }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-03-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-23
          • 1970-01-01
          相关资源
          最近更新 更多