My presentation on Airplay given at 360iDev 2013 in Denver, CO
AirPlay:Creating Apps with(Split) Personality360iDevSeptember 2013Denver, COJay Thrash@jaythrashjaythrash.comWednesday, September 11, 13
View Slide
Airplay ModesImages: http://www.apple.com/airplay/Wednesday, September 11, 13
Agenda•Detection•Interrogation•Initialization•ImplementationWednesday, September 11, 13
Detection(Active)Wednesday, September 11, 13
Detection(Active)if ([[UIScreen screens] count] > 1) {// You have an external screen!}Wednesday, September 11, 13
Detection(Passive)Wednesday, September 11, 13
Detection(Passive)[center addObserver:selfselector:@selector(screenConnected:)name:UIScreenDidConnectNotificationobject:nil];Wednesday, September 11, 13
Detection(Passive)[center addObserver:selfselector:@selector(screenConnected:)name:UIScreenDidConnectNotificationobject:nil];[center addObserver:selfselector:@selector(screenDisconnected:)name:UIScreenDidDisconnectNotificationobject:nil];Wednesday, September 11, 13
DemoPhotoScrollw/FingerPrintsWednesday, September 11, 13
Interrogation(screen characteristics)UIScreenMode• size (resolution)• pixelAspectRatioWednesday, September 11, 13
Interrogation(screen characteristics)Wednesday, September 11, 13
Interrogation(screen characteristics)[UIScreen screens][1].availableModes;Wednesday, September 11, 13
Interrogation(screen characteristics)[UIScreen screens][1].availableModes;[UIScreen screens][1].preferredMode;Wednesday, September 11, 13
Initialization(do my bidding!)Wednesday, September 11, 13
Initialization(do my bidding!)externalScreen.currentMode = selectedMode;Wednesday, September 11, 13
Initialization(do my bidding!)externalScreen.currentMode = selectedMode;CGRect windowFrame = CGRectZero;windowFrame.size = selectedMode.size;UIWindow *externalWindow = [[UIWindow alloc]init];externalWindow.screen = externalScreen;externalWindow.frame = windowFrame;Wednesday, September 11, 13
DemoMultiScreenWednesday, September 11, 13
ImplementationUIKit App?• externalWindow addSubview:to draw elements on externally• manually scale & position assetsrelative to screen resolution(@2x only applies to mainScreen)Wednesday, September 11, 13
ImplementationPerfomance App? (Game)• UIScreenOverscanCompensationhandles pixel loss at screen edges• displayLinkWithTarget:selectorsync drawing with refresh rateWednesday, September 11, 13
Simulator → TV Outis your friend!Wednesday, September 11, 13
DemoPhamily PheudWednesday, September 11, 13
Wednesday, September 11, 13
Don’t Forget...A+++!!!Would watchagain!Wednesday, September 11, 13
Don’t Forget...No Angry Birdsdemo. Lame.Wednesday, September 11, 13
360iDevSeptember 2013Denver, COJay Thrash@jaythrashjaythrash.comThanks!Wednesday, September 11, 13