Airplayミラーリングと分割画面をテストするための非常にシンプルなアプリケーションを作成しようとしています。私のメインビューコントローラーには、ミラーリングモードと分割画面モードを切り替えることを想定したスイッチがあります。これはすべて、システムドックでミラーリングを有効にした後です(つまり、最初にメインドックでミラーリングを有効にしてから、スイッチを使用してミラーモードから分割に移行します)アプリからの画面モード)。最初のスイッチは問題なく動作します-AppleTVに新しい未亡人が表示されますが、デバイスの画面は同じままです。もう一度切り替えると、外観がデバイスの画面に表示されます。この時点では、スイッチがなくなっているため、私にできることは何もありません...(外部画面は、演習のために空白の画面にすぎません)。
誰かが私が間違っていることを理解するのを手伝ってくれますか?私はそれが何か小さいことをかなり確信しています、しかし私が完全に離れていても私は驚かないでしょう...:/
私のコードのいくつか:
AppDelegate:
- (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;
}
viewcontroller.m:
screenDidChangeはviewDidLoadから呼び出されます。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];
}
}