【发布时间】:2011-11-26 01:16:07
【问题描述】:
我正在使用 iPhone 4S 玩 AirPlay,但遇到了一些问题。我已经将我的 Apple TV 2 更新到了最新版本(我认为是 4.4.3?我忘记了,它在另一个房间,我懒得检查)并且我在使用 Xcode 4.2 Build 4D199 时在我的 4S 上安装了 iOS 5.0 .我编写了一个简单的 UIView 应用程序,它尝试在可用时在第二个屏幕上绘图。这是我的 viewDidLoad 中的内容:
- (void)viewDidLoad
{
[super viewDidLoad];
[self.view addSubview:[[MPVolumeView alloc] initWithFrame:CGRectMake(0, 0, 320, 50)]];
NSLog(@"Registering for screen connect events...");
// Do any additional setup after loading the view, typically from a nib.
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(screenDidConnect:)
name:UIScreenDidConnectNotification
object:nil];
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(screenDidDisconnect:)
name:UIScreenDidDisconnectNotification
object:nil]; NSLog(@"There are %i connected screens.", ScreenCount);
if (ScreenCount > 1) {
self.secondWindow = [self myScreenInit:[[UIScreen screens] objectAtIndex:1]];
[self.secondWindow addSubview:[self createFullscreenViewForText:@"Second window" withSize:CGSizeMake(640, 480)]];
}
}
当我启用 TV Out 时,此代码在模拟器中有效,但如果我在调试时启用 TV Out,它总是会崩溃。在模拟器的硬件菜单中启用 TV out 后,我必须重新启动应用程序。重新启动时,我在第二个屏幕上看到第二个屏幕 UILabel。在 iPhone 4S 上,如果我使用运行任务栏中的 AirPlay 控件一直到左侧启用 AirPlay,我才能完成这项工作。您会注意到,我在启动时向视图添加了一个 MPVolumeView 组件,我尝试使用它来连接我的 Apple TV,但无济于事。
如果我使用应用程序内 MPVolumeView,我可以成功断开与 Apple TV 的连接,但是当我再次使用它并选择 Apple TV 重新连接时,我没有收到 UIScreenDidConnectNotification。我再次看到第二个屏幕的唯一时间是启用镜像。如果我连接任何一个 AirPlay 控件,我只会计算 1 个屏幕并且永远不会收到通知。此外,每次我启用镜像时,我都会在控制台日志中看到:
Could not find mapped image ColorOnGrayShadow_AirPlay.png
这似乎被打破了,我想知道其他人在这方面的经验。当我学习新事物时,我会继续玩弄和更新这篇文章。
【问题讨论】:
-
我遇到了完全相同的问题,即 MPVolumeView 没有提供另一个屏幕。我在将内容放到第二个显示器上时遇到问题,但事实证明这是因为我没有保留窗口对象。不过,不必使用镜像来完成这项工作会很好。
-
Hey Cliff - 知道如何从另一个屏幕控制一个屏幕吗?我不知道该怎么做。谢谢!
-
如果您的意思是通过 AirPlay 控制第二个屏幕,那么就是使用 AirPlay 的 API 访问第二个屏幕。一个你有它的参考,然后你可以在上面画或放置任何你想要的东西。