2

我正在编写一个 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;


        }
    }
}
4

1 回答 1

0

巧合的是,我一直在使用 iPad 开发类似的信息亭应用程序。就我而言,它利用一些增强现实在外部显示器上显示相关内容。我使用 iPad 屏幕作为增强现实体验的配置面板。

我发现,解决这个问题的最佳方法是为每个显示器使用带有两个 UIScreens 的单独窗口。这使您能够正确地制作体验。我不确定你是否已经在使用这种方法,但如果你没有,那么这就是要走的路。

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

从 iOS 开发人员库中的 ExternalDisplay 示例代码:

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

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

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

  3. 选择与所需分辨率对应的 UIScreenMode 对象,并将其分配给屏幕对象的 currentMode 属性。

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

  5. 将屏幕对象分配给新窗口的屏幕属性。

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

  7. 显示窗口。

此外,UIScreen文档也很有帮助。

于 2012-09-05T18:14:29.460 回答