如何使用Widescreen 16:9 airplay输出设置iPad应用程序的视图层次结构

时间:2012-07-10 16:46:53

标签: ipad uiviewcontroller uiwindow airplay widescreen

我想创建一个iPad应用程序,除了普通的ipad屏幕(4:3)之外,如果连接了第二个屏幕,则使用包含16:9宽屏格式的UIWindow的第二个UIScreen。
我使用AppleTV进行连接。

我不只是想将ipad屏幕镜像到电视,因为它只是一张4:3的图片 - 我想让它使用整个16:9宽屏。

所以我开始设置了第二个UIScreen,窗口现在以宽屏格式显示,并在电视上显示绿色背景。

//Check for Second Screen and if available, make a second UIWindow and put it on the      second screen
NSArray* connectedScreens = [UIScreen screens];
NSInteger numberOfScreens = [[UIScreen screens]count];
NSLog(@"Number of screens connected: %d",numberOfScreens);

if (numberOfScreens > 1) {
    //we have a second screen connected, display an extra window on the second screen
    UIScreen* secondScreen = [connectedScreens lastObject];
    UIWindow* secondWindow = [[UIWindow alloc]initWithFrame:secondScreen.bounds];
    secondWindow.backgroundColor = [UIColor greenColor];
    [secondWindow setScreen: secondScreen];
    [secondWindow makeKeyAndVisible];
    self.tvWindow = secondWindow;
}

到目前为止一切顺利。

但现在我不确定如何设置导航/视图层次结构。

我想在两个UIScreens(ipad + TV)上显示相同的数据, 只针对不同的屏幕尺寸进行了优化。

因为我有完全相同的数据应该显示,我不希望有不同的类似viewControllers的实例浮动我认为我可以使用每个ViewController两个xib文件,一个用于4:3 ipad视图放入viewController的'view'属性和16:9宽屏电视的一个xib,放入同一viewController的'tvView'属性。

ipad UIWindow有一个旋转不同UIViewControllers的UINavigationController。

因此,如果我将ViewController推到ipad Window的Navigationcontroller上,我可以将TV-xib中相应的tvView添加到电视屏幕的UIWindow。

我在正确的道路上吗? 你会怎么做?

一个小草图: view hierarchy sketch :)

1 个答案:

答案 0 :(得分:0)

这听起来不错。如果您允许用户与导航控制器进行交互,则必须注册为控制器delegate,以便您可以跟踪iPad上导航堆栈的内容并相应地更换电视视图。 / p>