1

我正在尝试创建一个非常简单的应用程序来测试 Airplay 镜像和分屏。我的主视图控制器有一个开关,假设在镜像模式和分屏模式之间切换,所有这一切都是在系统坞站上启用镜像之后(所以首先 - 在主坞站上启用镜像,然后使用开关从镜像模式转到拆分应用程序的屏幕模式)。第一个开关工作正常 - 我在 Apple TV 上看到了新寡妇,并且设备屏幕保持不变。再次切换,使外部视图出现在设备屏幕上。在这一点上,我无能为力,因为开关不再存在......(为了练习,外部屏幕只是一个空白屏幕)。

谁能帮我理解我做错了什么?我很确定这是一件小事,但如果我完全离开,我不会感到惊讶......:/

我的一些代码:

应用委托:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
return YES;
}

视图控制器.m:

从 viewDidLoad 调用 screenDidChange。switchAction 在点击开关时被调用。

 - (void)screenDidChange:(NSNotification *)notification
 {

NSArray *screens;
screens = [UIScreen screens];
NSUInteger screenCount = [screens count];

if (screenCount > 1) 
{
    self.extScreen = [screens objectAtIndex:1];    
}
else 
{
    // Release external screen and window
    self.extScreen = nil;
    self.mainWindow = nil;
    [self externalWindow:self.mainWindow];
}
}


- (IBAction)switchAction:(id)sender {

NSArray *screens;
screens = [UIScreen screens];
NSUInteger screenCount = [screens count];



if ([sender isOn] == YES)
{
    //Mirror mode
    self.extScreen = [screens objectAtIndex:1]; 
    [mainWindow makeKeyAndVisible];
}
else {
    //Split Screen mode
    self.extScreen = [screens objectAtIndex:0];
    [mainWindow makeKeyAndVisible];
}

self.extWindow2.hidden = NO;


if (extWindow2 == nil || !CGRectEqualToRect(extWindow2.bounds, [extScreen bounds])) 
{
    extWindow2 = [[UIWindow alloc] initWithFrame:[extScreen bounds]];
    extWindow2.screen = extScreen;
    UIView *view = [[UIView alloc] initWithFrame:[extWindow2 frame]];
    view.backgroundColor = [UIColor blueColor];
    [extWindow2 addSubview:view];
    [extWindow2 makeKeyAndVisible];

}
}
4

0 回答 0