Sto provando ad abilitare il supporto AirPlay nella mia app. Non sto facendo video; Voglio usare il display esterno come "secondo display".iOS AirPlay: la mia app riceve notifica di un display esterno solo quando il mirroring è attivo?
Ecco il mio problema: se scelgo "AppleTV" dal mio pulsante AirPlay, la mia app non viene notificata. L'unica volta che la mia app viene notificata è quando abbandona la mia app, vai al pulsante AirPlay a livello di sistema operativo, scegli "AppleTV" e attiva Mirroring. Se spengo il mirroring, la mia app viene quindi informata che il display esterno è sparito.
Quindi:
- Perché non la mia app per sapere quando prendo un display esterno da all'interno della mia app?
- Perché la mia app viene informata della presenza di uno schermo esterno quando si attiva il mirroring su ... e non prima? Sono ovviamente equivoco qualcosa, ma sembrerebbe come accendere il mirroring su dovrebbe informare il mio app che il display esterno è andato (piuttosto che ora disponibile, dal momento che il sistema operativo dovrebbe essere utilizzando display esterno che per il mirroring.)
Esempio di codice di seguito. Grazie in anticipo per qualsiasi aiuto!
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
// Is there already an external screen?
if (UIScreen.screens.count > 1)]
{
[self prepareExternalScreen:UIScreen.screens.lastObject];
}
// Tell us when an external screen is added or removed.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(externalScreenDidConnect:) name:UIScreenDidConnectNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(externalScreenDidDisconnect:) name:UIScreenDidDisconnectNotification object:nil];
self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
self.window.rootViewController = self.viewController;
// Add AirPlay control to view controller.
MPVolumeView* airplayButtonView = [[MPVolumeView alloc] init];
airplayButtonView.frame = CGRectMake(300, 300, 50, 50);
airplayButtonView.backgroundColor = [UIColor blackColor];
airplayButtonView.showsVolumeSlider = NO;
airplayButtonView.showsRouteButton = YES;
[self.viewController.view addSubview:airplayButtonView];
[self.window makeKeyAndVisible];
return YES;
}
#pragma mark - External screen handling
- (void)externalScreenDidConnect:(NSNotification*)notification
{
[self prepareExternalScreen:notification.object];
}
- (void)externalScreenDidDisconnect:(NSNotification*)notification
{
// Don't need these anymore.
self.externalWindow = nil;
}
- (void)prepareExternalScreen:(UIScreen*)externalScreen
{
NSLog(@"PREPPING EXTERNAL SCREEN.");
self.viewController.view.backgroundColor = [UIColor blueColor];
CGRect frame = externalScreen.bounds;
self.externalWindow = [[UIWindow alloc] initWithFrame:frame];
self.externalWindow.screen = externalScreen;
self.externalWindow.hidden = NO;
self.externalWindow.backgroundColor = [UIColor redColor];
}
Grazie. E schifo: sembra che Apple abbia fatto un lavoro terribile con l'interfaccia utente su questo. –
È ancora così? Vedo che questo post è piuttosto vecchio e sto cercando un modo. – VaporwareWolf