6

我正在考虑将 AirPlay 功能添加到我的一个 ViewController 中。View Controller 只显示一个 UIWebView。我想要做的是添加一个按钮,将这个内容镜像到 Apple TV。我知道可以进行系统范围的镜像,但它不会填满整个屏幕,周围有黑条。我一直在网上搜索,但我发现的大多数东西都是从 iOS 5 回来的,而且已经过时了。有人可以向我指出可以提供帮助的教程或嵌入式库的方向吗?我只需要它来镜像一个视图的内容,以便在 Apple TV 上全屏显示。

到目前为止,这就是我所做的,但我相信它只创建了第二个窗口,没有在上面放任何东西。

在 AppDelegate 中,我为它创建了一个属性:

@property (nonatomic, retain) UIWindow *secondWindow;

在 AppDelegate 的 didFinish 方法中,我运行:

 NSNotificationCenter *center = [NSNotificationCenter defaultCenter];

    [center addObserver:self selector:@selector(handleScreenDidConnectNotification:)
                   name:UIScreenDidConnectNotification object:nil];
    [center addObserver:self selector:@selector(handleScreenDidDisconnectNotification:)
                   name:UIScreenDidDisconnectNotification object:nil];

然后在 AppDelegate 我有:

- (void)handleScreenDidConnectNotification:(NSNotification*)aNotification
{
    UIScreen *newScreen = [aNotification object];
    CGRect screenBounds = newScreen.bounds;

    if (!self.secondWindow)
    {
        self.secondWindow = [[UIWindow alloc] initWithFrame:screenBounds];
        self.secondWindow.screen = newScreen;

        // Set the initial UI for the window.
    }
}

- (void)handleScreenDidDisconnectNotification:(NSNotification*)aNotification
{
    if (self.secondWindow)
    {
        // Hide and then delete the window.
        self.secondWindow.hidden = YES;
        self.secondWindow = nil;

    }

}

在我想允许在 Apple TV 上镜像 WebView 的 viewController 中,我有:

- (void)checkForExistingScreenAndInitializeIfPresent
{
    if ([[UIScreen screens] count] > 1)
    {
        // Get the screen object that represents the external display.
        UIScreen *secondScreen = [[UIScreen screens] objectAtIndex:1];
        // Get the screen's bounds so that you can create a window of the correct size.
        CGRect screenBounds = secondScreen.bounds;

       appDelegate.secondWindow = [[UIWindow alloc] initWithFrame:screenBounds];
        appDelegate.secondWindow.screen = secondScreen;

        // Set up initial content to display...
        // Show the window.
       appDelegate.secondWindow.hidden = NO;
        NSLog(@"YES");

    }
}

我从这里得到了这一切。但是,这就是它所显示的全部内容,因此我不确定如何将内容显示到该屏幕上。

4

3 回答 3

3

根据您的网络视图中发生的情况,您要么必须将第二个指向同一页面,要么将现有的一个移动到新窗口。无论哪种方式,您都将第二个窗口视为与您的应用程序的主窗口几乎相同 - 向其中添加视图,它们应该显示在第二个显示器上。

于 2014-01-07T19:11:39.350 回答
1

我假设您已经看过它,但这是我能找到的唯一示例项目:https ://github.com/quellish/AirplayDemo/

以下是一些可能值得一读的相关问题:

有谁知道如何开始使用airplay?

Airplay Mirroring + External UIScreen = 全屏 UIWebView 视频播放?

iOS AirPlay:我的应用程序仅在镜像打开时才收到外部显示器通知?

祝你好运!

于 2014-01-14T17:10:07.190 回答
0

目前只有两个选项可以进行 Airplay“镜像”:系统范围的监控和完全自定义的镜像。由于系统范围的镜像不是您的解决方案,因此您必须按照您在代码片段中已经确定的方式进行。

正如 Noah 所指出的,这意味着为第二个屏幕提供内容,就像为内部显示器提供内容一样。据我了解,您希望在内部显示器上显示与以前相同的数据/网站,但在远程视图/网络视图中以不同方式显示(例如不同的纵横比)。一种方法是让一个 webview 在主/从设置中跟随另一个。您必须监视主服务器中的更改(如用户 scolling)并将它们传播到从服务器。第二种方法可能是将原始 webview 内容渲染到缓冲区并将此缓冲区部分绘制在“哑”UIView 中。这会更快一些,因为网站不必加载和渲染两次。

于 2014-01-13T11:24:49.963 回答