iOS应用程序在两个屏幕上运行(不是镜像)

6
我创建了一款iPad应用程序,其中包含幻灯片,当用户点击幻灯片时,他/她可以输入一些信息。
现在我想通过AirPlay(如果可能的话,也可以通过电缆)将幻灯片内容显示在电视上。这可以实现吗?我们可以在电视和iPad上同时运行幻灯片,然后当用户在iPad上点击幻灯片时,凭据输入屏幕会显示,但在电视上仍然会显示底层的幻灯片而不是凭据?
如何在iOS中实现这一点?是否可以在电视上显示应用程序的一部分?因此不是镜像整个应用程序。

我正在尝试在iPhone 4s上使用AirPlay。只有在任务栏中设置了镜像选项后,我才成功将其与我的Apple TV 2连接起来。在发布类似问题之前,我打算在这里浏览其他可能的答案。 - Cliff
你能把我的答案标记为正确吗?这么多赞,现在应该被认为是正确的了吧? - Dev2rights
2个回答

19
你可以编写一个应用程序,使用Airplay和Apple TV处理2个UIScreens,然后为电视屏幕UIScreen和iPad屏幕UIScreen分别设置不同的根视图控制器。然后在电视的视图控制器上显示图像或幻灯片,并从iPad视图控制器的事件中运行它!

在你的app delegate的didFinishLaunchingWithOptions或didFinishLaunching中设置通知以接收连接的屏幕。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(screenDidConnect:) name:UIScreenDidConnectNotification object:nil];

那么您需要保留对独立窗口的引用,并像对待其他窗口一样将控制器推送到独立窗口中。

- (void) myScreenInit:(UIScreen *)connectedScreen:(UIViewController*)mynewViewController
{    
    //Intitialise TV Screen
   if(!windowTV)
    {
        CGRect frame = connectedScreen.bounds;
        windowTV = [[UIWindow alloc] initWithFrame:frame];
        windowTV.backgroundColor = [UIColor clearColor];
       [windowTV setScreen:connectedScreen];
        windowTV.hidden = NO;
    }

    UIViewController* release = windowTV.rootViewController;
    windowTV.rootViewController = mynewViewController;
    [release removeFromParentViewController];
    [release release];
}

- (void)setTvController:(UIViewController*)mynewViewController
{     
    UIViewController* release = windowTV.rootViewController;
    windowTV.rootViewController = mynewViewController;
    [release removeFromParentViewController];
    [release release];
}

- (void)screenDidConnect:(NSNotification *)notification {
     [self myScreenInit:[notification object]];
}

这个答案没有具体说明如何完成。它只是提到了这是可能的,并以感叹号表示兴奋。 - Cliff
我取消了我的反对票。这个答案还有更多内容。像我几天前一样完全不熟悉API的人,在按照你上面发布的内容后,仍然看不到任何关于次要屏幕的东西。 - Cliff
7
如果您在没有学习视图层次结构文档的情况下就开始涉足这个领域,那么您就是想要在学会走路之前就尝试着奔跑了。 - Dev2rights
这是一个很好的答案。当我构建我的应用程序时,AirPlay只是一个梦想,但我使用了这个变体来响应第二个屏幕(在我这种情况下通过电缆连接到电视/显示器),并将正确的视图推送到它上面。 - Alan Taylor
当您关闭镜像选项时,screenDidConnect或screenDidDisconnect通知将不会触发。这不是一个好的答案。 - Akhil PK

0

在iOS 5.0中似乎存在一个错误,这使得这个问题变得棘手。您必须从运行任务栏启用镜像(在通过API检测到第二个屏幕之前向左滚动)。我在这里发布了详细信息:如何使用iOS 5+ AirPlay作为第二个屏幕


我说杯子是半空的,他们说它是半满的。一个功能显然是一些类似GameKit的API调用,用于扫描和检测附近的AirPlay兼容设备。 - Cliff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接