UIImagePickerController和外部显示

时间:2012-09-01 02:48:20

标签: ios ipad uiimagepickercontroller

我正在编写一个iPad信息亭类型的应用程序,允许访问者使用前置摄像头录制视频,并查看相机胶卷中针对外部监视器的现有视频。我正在学习XCode,并且正在使用针对iOS 5的Xcode 4.4.1。最近似乎发生了很多变化,这使得学习变得更加困难,所以我试图让事情变得尽可能简单,这就是为什么我是使用UIImagePicker。

一切都按照我的意愿运作,但有一个例外 - 我无法根据需要在外接显示器和iPad之间切换。当用户录制视频时,它在iPad上全屏显示。这很好,但是在他们停止录制之后,视频会立即发送到外部显示器进行审批,占位符图像留在UIPopover中。我希望看到/做的是将视频预览全屏保留在iPad上,或者将视频定位到UIPopover。

原因是外部显示器无法从用户访问iPad的位置轻松查看。因此,他们被要求批准(点击使用)他们无法真正看到的东西。将它保存在iPad上要好得多。下面的代码是我用来录制的代码。

其他一切都很有效,我希望用户从图书馆中选择视频并在外接显示器上显示,因为这是默认行为,它可以正常工作。

到目前为止我能找到的最接近的答案是:UIImagePickerController in an existing UIPopoverController

是否有一种简单的方法可以禁用外部显示器或保持视频预览不被发送?

   - (IBAction)useCameraRoll:(id)sender
{
    if([self.popoverController isPopoverVisible]) {
        [self.popoverController dismissPopoverAnimated:YES];
    } else {
        if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum])
        {

            UIImagePickerController *imagePicker =
            [[UIImagePickerController alloc] init];
            imagePicker.delegate = self;
            imagePicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
            imagePicker.mediaTypes = [NSArray arrayWithObjects:(NSString *) kUTTypeMovie, nil];

            imagePicker.allowsEditing = NO;

            self.popoverController = [[UIPopoverController alloc] initWithContentViewController:imagePicker];
            //self.popoverController = [[UIPopoverController alloc] setContentViewController:animated];

            self.popoverController.delegate = self;

            [self.popoverController
             presentPopoverFromBarButtonItem:sender  permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];

            newMedia = NO;


        }
    }
}

1 个答案:

答案 0 :(得分:0)

巧合的是,我一直在使用iPad制作类似的自助服务终端应用程序。在我的情况下,它利用一些增强现实在外部显示器上显示相关内容。我使用iPad屏幕作为增强现实体验的配置面板。

最好的方法,我发现,接近这个,就是为每个显示器使用带有两个UIScreens的单独窗口。这使您可以正确地制作体验。我不确定你是否已经使用这种方法,但如果你不是,那么这就是你要走的路。

要开始使用,您可以阅读ExternalDisplay代码示例。摘自:

来自iOS Developer Library中的ExternalDisplay示例代码:

  

要在外接显示器上显示内容,请执行以下操作:

     
      
  1. 使用UIScreen类的屏幕类方法确定外部显示器是否可用。

  2.   
  3. 如果外部屏幕可用,请获取屏幕对象并查看其availableModes属性中的值。此属性包含   屏幕支持的配置。

  4.   
  5. 选择与所需分辨率对应的UIScreenMode对象,并将其指定给屏幕的currentMode属性   对象

  6.   
  7. 创建一个新窗口对象(UIWindow)以显示您的内容。

  8.   
  9. 将屏幕对象指定给新窗口的屏幕属性。

  10.   
  11. 配置窗口(通过添加视图或设置OpenGL ES渲染上下文)。

  12.   
  13. 显示窗口。

  14.   

此外,UIScreen文档非常有用。