iOS AirPlay第二屏幕教程



我正在考虑将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视图中发生的情况,您必须使第二个页面指向同一页面,或者将现有页面移动到新窗口。无论哪种方式,你都可以像对待应用程序的主窗口一样对待第二个窗口——向其中添加视图,它们就会显示在第二个显示器上。

我想你已经看过了,但这是我能找到的唯一示例项目:https://github.com/quellish/AirplayDemo/

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

有人知道如何开始播放吗?

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

iOS AirPlay:只有当镜像打开时,我的应用程序才会收到外部显示的通知?

祝你好运!

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

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

最新更新