Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS AirPlay第二屏幕教程_Ios_Uiwindow_Gnu Screen_Airplay_Apple Tv - Fatal编程技术网

iOS AirPlay第二屏幕教程

iOS AirPlay第二屏幕教程,ios,uiwindow,gnu-screen,airplay,apple-tv,Ios,Uiwindow,Gnu Screen,Airplay,Apple Tv,我正在考虑将AirPlay功能添加到我的一个ViewController中。视图控制器仅显示UIWebView。我想做的是添加一个按钮,将此内容镜像到苹果电视。我知道可以进行系统范围的镜像,但它不会填满整个屏幕,四周都有黑条。我一直在网上搜索,但我找到的大部分东西都是从iOS 5上回来的,已经过时了。有人能给我指一个教程的方向吗?或者是可以帮助我的图书馆?我只需要它来反映苹果电视上全屏显示的一个视图的内容 到目前为止,这是我所做的,但我相信它只创建了第二个窗口,没有在上面添加任何内容 在AppD

我正在考虑将AirPlay功能添加到我的一个ViewController中。视图控制器仅显示UIWebView。我想做的是添加一个按钮,将此内容镜像到苹果电视。我知道可以进行系统范围的镜像,但它不会填满整个屏幕,四周都有黑条。我一直在网上搜索,但我找到的大部分东西都是从iOS 5上回来的,已经过时了。有人能给我指一个教程的方向吗?或者是可以帮助我的图书馆?我只需要它来反映苹果电视上全屏显示的一个视图的内容

到目前为止,这是我所做的,但我相信它只创建了第二个窗口,没有在上面添加任何内容

在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");

    }
}

这些都是我从你那里得到的。但是,这就是它显示的全部内容,因此我不确定如何将内容放到该屏幕上。

根据web视图中的情况,您必须将第二个内容指向同一页面,或者将现有内容移动到新窗口。无论哪种方式,您对待第二个窗口的方式与对待应用程序主窗口的方式基本相同。添加视图到第二个窗口中,它们应该显示在第二个屏幕上。

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


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

我想你已经看过了,但这是我能找到的唯一一个示例项目:

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


祝你好运

我已经在支票上添加了其他。。。方法,将根视图更改为新窗口,添加视图和子视图,但它仍然不起任何作用。只是对旧答案的一些想法:我认为复制原始webView的请求并在“外部”副本上调用相应的方法会更容易。另外,当有不同的方面时,网站不会那么高,因此需要相应地转换滚动量。然而,OP正在寻找一种在AirPlay设备上显示第二个窗口的方法。你有没有想出解决方案?“我现在正试着做同样的事情。”丹尼尔,不幸的是,我没有。我已经求助于让人们做airplay屏幕镜像,这几乎没有那么优雅或有用,但很好。5000个视图无法理解它。