{"id":770,"date":"2012-05-07T09:00:45","date_gmt":"2012-05-07T16:00:45","guid":{"rendered":"https:\/\/redfindevelop.wpengine.com\/blog\/devblog\/?p=770"},"modified":"2020-10-05T13:12:25","modified_gmt":"2020-10-05T20:12:25","slug":"creating_a_dual-screen_airplay_experience_for_ios_and_apple_tv","status":"publish","type":"post","link":"https:\/\/www.redfin.com\/news\/creating_a_dual-screen_airplay_experience_for_ios_and_apple_tv\/","title":{"rendered":"Creating a Dual-Screen AirPlay Experience for iOS and Apple TV"},"content":{"rendered":"<p>Back in March, while everyone was waiting for the new iPad with bated breath, we heard rumblings of a <a href=\"http:\/\/www.apple.com\/appletv\/\">3rd-generation Apple TV<\/a>. We\u2019re always trying to find new ways to wow our users, and creating a dual-screen AirPlay experience with Apple TV seemed like a great opportunity to do just that. In the <a href=\"https:\/\/redfin.com\/blog\/2012\/04\/redfins_iphone_and_ipad_app_goes_native_.html\">last major release of our iOS app<\/a>, we added a new feature that allows users who own an Apple TV and an iOS device to view full-screen slideshows of homes.<\/p>\n<h2>Hold on&#8230;what is AirPlay exactly?<\/h2>\n<p><a href=\"http:\/\/www.apple.com\/airplay\/\">AirPlay<\/a> is Apple\u2019s proprietary protocol stack for wireless streaming of media. Since this is a developer blog, we\u2019ll cut through the marketing-speak for you and cut right to the heart of what AirPlay does.<\/p>\n<p><strong>Streaming audio\/video<\/strong> &#8211; On iOS, applications can stream audio or video to an AirPlay-enabled receiving device like an Apple TV or AirPort Express with connected speakers (audio only, of course). This feature has been available to third-party apps since version 4.3. Most apps that utilize AirPlay fall into this category. Computers running iTunes have this capability as well.<\/p>\n<p><strong>Screen Mirroring<\/strong> &#8211; Screen mirroring has been iOS\u2019s confusing little secret since iOS 5 arrived last year. This feature allows second and third-generation iPads and the iPhone 4S to stream content wirelessly to an Apple TV. As the name implies, you can mirror what appears on your iOS device, which makes sense given the definition of the verb <em><a href=\"http:\/\/dictionary.reference.com\/browse\/mirror\">to mirror<\/a><\/em>. Enabling screen mirroring on a device also allows apps to send an <em>entirely different view<\/em>. To alleviate confusion when discussing this feature, we use the term \u201cscreen mirroring\u201d to refer to the use of the Apple TV as a second display and \u201cactual screen mirroring\u201d to refer to displaying the same display on both the iOS device and the Apple TV. Needless to say, there will still be some confusion.<\/p>\n<p>As a real estate technology company, we have a lot more pretty pictures than streaming media lying around. AirPlay\u2019s streaming capabilities are well documented and not useful to us. Despite being introduced in the second-generation Apple TV, screen mirroring is considerably less documented. We hope the lessons we learned developing a screen mirroring experience for iOS prove useful to others.<\/p>\n<h2>The Design<\/h2>\n<p>Imagine that you\u2019re sitting at home on your couch and flipping through homes on Redfin on your iPad. While your significant other is cooking in the kitchen, you find a drop dead gorgeous home in your price range in the perfect neighborhood and want to share it from across the room.<\/p>\n<p>This is the scenario we designed for. It\u2019s useful to remember how different this medium is from the iPhone or iPad. Your Apple TV display cannot detect touch gestures, is considerably larger than an iPad (size-wise, probably not in terms of resolution), and is typically viewed from at least a few feet away. As users, we\u2019re very used to reading on smartphones, tablets, and computers, but TV is what we go to when we need to get away from all those words. Minimize the amount of text to display. When you do display text, make sure it\u2019s BIG.<\/p>\n<p>Our AirPlay slideshow has two features that supplement our app:<\/p>\n<ol>\n<li>When a user a selects a home, the Apple TV display will play an automated slideshow of the home\u2019s photos.<\/li>\n<li>When a user enters the home\u2019s photo gallery, the slideshow will sync with the photo that the user has selected.<\/li>\n<\/ol>\n<p>Having screen mirroring enabled in most apps will perform \u201cactual screen mirroring\u201d on the Apple TV. To make it clear to the user to expect a different experience right from the start, we display a splash screen on the external display with instructions on how to start a slideshow. We also give the option to disable the slideshow in case the user prefers to see the same screen in a larger format.<\/p>\n<h2>The Code<\/h2>\n<p>Apple\u2019s documentation on <a href=\"blank\">displaying content on an external display<\/a> is very thorough and should be your primary source for developing a dual-screen experience. This post focuses on some of the lessons we learned that we haven\u2019t found documented elsewhere. It is assumed you have some experience with developing iOS apps in Objective-C.<\/p>\n<p><strong>Tip #1: There is no way to detect AirPlay capabilities for a device.<\/strong><\/p>\n<p>When screen mirroring is enabled and an app is opened, it simply appears in the SDK as a second <code>UIScreen<\/code>. It is not possible to distinguish between a display connected via HDMI out and one connected via AirPlay.<\/p>\n<p>Apple recommends <a href=\"http:\/\/blog.mugunthkumar.com\/coding\/iphone-tutorial-better-way-to-check-capabilities-of-ios-devices\/\">detecting capabilities instead of determining the device type<\/a> as it helps makes apps future-proof for new devices. Unfortunately, it isn\u2019t possible to detect potential AirPlay screen mirroring displays if one is not currently enabled. The table below shows which iOS devices support external displays.<\/p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"2\">\n<tbody>\n<tr style=\"text-align: center\">\n<th>Devices<\/th>\n<th>HDMI-out<\/th>\n<th>Screen Mirroring<\/th>\n<\/tr>\n<tr>\n<td>iPod Touch (All Generations)<\/td>\n<td style=\"text-align: center;background: #ff9090\">No<\/td>\n<td style=\"text-align: center;background: #ff9090\">No<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left\">iPhone 3GS and earlier<\/td>\n<td style=\"text-align: center;background: #ff9090\">No<\/td>\n<td style=\"text-align: center;background: #ff9090\">No<\/td>\n<\/tr>\n<tr>\n<td>iPhone 4<\/td>\n<td style=\"text-align: center;background: #90ff90\">Yes<\/td>\n<td style=\"text-align: center;background: #ff9090\">No<\/td>\n<\/tr>\n<tr>\n<td>iPhone 4S<\/td>\n<td style=\"text-align: center;background: #90ff90\">Yes<\/td>\n<td style=\"text-align: center;background: #90ff90\">Yes<\/td>\n<\/tr>\n<tr>\n<td>iPad (1st Gen.)<\/td>\n<td style=\"text-align: center;background: #90ff90\">Yes<\/td>\n<td style=\"text-align: center;background: #ff9090\">No<\/td>\n<\/tr>\n<tr>\n<td>iPad (2nd Gen.)<\/td>\n<td style=\"text-align: center;background: #90ff90\">Yes<\/td>\n<td style=\"text-align: center;background: #90ff90\">Yes<\/td>\n<\/tr>\n<tr>\n<td>iPad (3rd Gen.)<\/td>\n<td style=\"text-align: center;background: #90ff90\">Yes<\/td>\n<td style=\"text-align: center;background: #90ff90\">Yes<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>A <a href=\"http:\/\/stackoverflow.com\/questions\/9935144\/detecting-ios-airplay-screen-mirroring-capabilities\/9985391#9985391\">helpful Stack Overflow user<\/a> told us about <a href=\"https:\/\/github.com\/erica\/uidevice-extension\">Erica Sadun\u2019s UIDevice extensions<\/a> that abstracts some of the device detection code for you. We don\u2019t use it in our code as we discovered it a little late in the game.<\/p>\n<p>We support the HDMI-only devices but display different instructions as not to mislead users into thinking their devices can do something they cannot.<\/p>\n<p><strong>Tip #2: When an external screen is detected, create a view controller specifically for that screen<\/strong><\/p>\n<p>Chances are that only a small percentage of your app\u2019s users have external display capabilities. You shouldn\u2019t increase the complexity of your code to handle such a small case.<\/p>\n<p>Handle the display of the external display in a single controller to keep this functionality separate from the rest of your codebase.<\/p>\n<div>\n<div class=\"syntaxhighlighter  objc\" style=\"font-size: 1em;margin: 1em 0;overflow: auto;width: 100%;background-color: white\">\n<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: 100%\">\n<tbody>\n<tr style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto\">\n<td class=\"gutter\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: #AFAFAF\">\n<div class=\"line number1 index0 alt2\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 0.5em 0 1em;text-align: right;vertical-align: baseline;width: auto;background-color: white;border-right: 3px solid #6CE26C\">1<\/div>\n<div class=\"line number2 index1 alt1\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 0.5em 0 1em;text-align: right;vertical-align: baseline;width: auto;background-color: white;border-right: 3px solid #6CE26C\">2<\/div>\n<div class=\"line number3 index2 alt2\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 0.5em 0 1em;text-align: right;vertical-align: baseline;width: auto;background-color: white;border-right: 3px solid #6CE26C\">3<\/div>\n<div class=\"line number4 index3 alt1\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 0.5em 0 1em;text-align: right;vertical-align: baseline;width: auto;background-color: white;border-right: 3px solid #6CE26C\">4<\/div>\n<div class=\"line number5 index4 alt2\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 0.5em 0 1em;text-align: right;vertical-align: baseline;width: auto;background-color: white;border-right: 3px solid #6CE26C\">5<\/div>\n<div class=\"line number6 index5 alt1\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 0.5em 0 1em;text-align: right;vertical-align: baseline;width: auto;background-color: white;border-right: 3px solid #6CE26C\">6<\/div>\n<div class=\"line number7 index6 alt2\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 0.5em 0 1em;text-align: right;vertical-align: baseline;width: auto;background-color: white;border-right: 3px solid #6CE26C\">7<\/div>\n<div class=\"line number8 index7 alt1\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 0.5em 0 1em;text-align: right;vertical-align: baseline;width: auto;background-color: white;border-right: 3px solid #6CE26C\">8<\/div>\n<div class=\"line number9 index8 alt2\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 0.5em 0 1em;text-align: right;vertical-align: baseline;width: auto;background-color: white;border-right: 3px solid #6CE26C\">9<\/div>\n<div class=\"line number10 index9 alt1\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 0.5em 0 1em;text-align: right;vertical-align: baseline;width: auto;background-color: white;border-right: 3px solid #6CE26C\">10<\/div>\n<div class=\"line number11 index10 alt2\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 0.5em 0 1em;text-align: right;vertical-align: baseline;width: auto;background-color: white;border-right: 3px solid #6CE26C\">11<\/div>\n<div class=\"line number12 index11 alt1\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 0.5em 0 1em;text-align: right;vertical-align: baseline;width: auto;background-color: white;border-right: 3px solid #6CE26C\">12<\/div>\n<div class=\"line number13 index12 alt2\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 0.5em 0 1em;text-align: right;vertical-align: baseline;width: auto;background-color: white;border-right: 3px solid #6CE26C\">13<\/div>\n<\/td>\n<td class=\"code\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: 100%\">\n<div class=\"container\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto\">\n<div class=\"line number1 index0 alt2\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 1em;text-align: left;vertical-align: baseline;width: auto;background-color: white\"><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: bold;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: #006699\">UIScreen<\/code> <code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: black\">*externalScreen = [[<\/code><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: bold;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: #006699\">UIScreen<\/code> <code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: black\">screens] objectAtIndex:1];<\/code><\/div>\n<div class=\"line number2 index1 alt1\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 1em;text-align: left;vertical-align: baseline;width: auto;background-color: white\"><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: bold;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: #006699\">UIWindow<\/code> <code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: black\">*externalWindow = [[<\/code><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: bold;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: #006699\">UIWindow<\/code> <code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: black\">alloc] initWithFrame:externalScreen.bounds];<\/code><\/div>\n<div class=\"line number3 index2 alt2\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 1em;text-align: left;vertical-align: baseline;width: auto;background-color: white\"><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: black\">externalWindow.screen = externalScreen;<\/code><\/div>\n<div class=\"line number4 index3 alt1\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 1em;text-align: left;vertical-align: baseline;width: auto;background-color: white\">&nbsp;<\/div>\n<div class=\"line number5 index4 alt2\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 1em;text-align: left;vertical-align: baseline;width: auto;background-color: white\"><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: #008200\">\/\/ This is a custom constructor that takes in the window size and uses<\/code><\/div>\n<div class=\"line number6 index5 alt1\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 1em;text-align: left;vertical-align: baseline;width: auto;background-color: white\"><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: #008200\">\/\/ it to size the controller's view on load. Accessing the view's<\/code><\/div>\n<div class=\"line number7 index6 alt2\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 1em;text-align: left;vertical-align: baseline;width: auto;background-color: white\"><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: #008200\">\/\/ window size on load didn't work for us.<\/code><\/div>\n<div class=\"line number8 index7 alt1\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 1em;text-align: left;vertical-align: baseline;width: auto;background-color: white\"><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: black\">YourExternalDisplayViewController *externalViewController =<\/code><\/div>\n<div class=\"line number9 index8 alt2\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 1em;text-align: left;vertical-align: baseline;width: auto;background-color: white\"><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: black\">[[YourExternalDisplayViewController alloc]<\/code><\/div>\n<div class=\"line number10 index9 alt1\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 1em;text-align: left;vertical-align: baseline;width: auto;background-color: white\"><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: black\">initWithFrame:externalWindow.frame];<\/code><\/div>\n<div class=\"line number11 index10 alt2\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 1em;text-align: left;vertical-align: baseline;width: auto;background-color: white\">&nbsp;<\/div>\n<div class=\"line number12 index11 alt1\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 1em;text-align: left;vertical-align: baseline;width: auto;background-color: white\"><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: black\">externalWindow.rootViewController = externalViewController;<\/code><\/div>\n<div class=\"line number13 index12 alt2\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 1em;text-align: left;vertical-align: baseline;width: auto;background-color: white\"><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: black\">externalWindow.hidden = <\/code><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: bold;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: #006699\">NO<\/code><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: black\">;<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>Tip #3: Use NSNotificationCenter to sync events between your external view\u2019s controller and the rest of your app<\/strong><\/p>\n<p>The other controllers in your application do not need to call the external view\u2019s controller directly. Instead, post a notification when you\u2019d like make a change to your external view. If there is no external display, the notifications will float off into the ether. If the controller exists, it will listen for the notification and handle it appropriately.<\/p>\n<p>In your external view controller:<\/p>\n<div class=\"syntaxhighlighter  objc\" style=\"font-size: 1em;margin: 1em 0;overflow: auto;width: 100%;background-color: white\">\n<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: 100%\">\n<tbody>\n<tr style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto\">\n<td class=\"gutter\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: #AFAFAF\">\n<div class=\"line number1 index0 alt2\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 0.5em 0 1em;text-align: right;vertical-align: baseline;width: auto;background-color: white;border-right: 3px solid #6CE26C\">1<\/div>\n<div class=\"line number2 index1 alt1\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 0.5em 0 1em;text-align: right;vertical-align: baseline;width: auto;background-color: white;border-right: 3px solid #6CE26C\">2<\/div>\n<div class=\"line number3 index2 alt2\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 0.5em 0 1em;text-align: right;vertical-align: baseline;width: auto;background-color: white;border-right: 3px solid #6CE26C\">3<\/div>\n<div class=\"line number4 index3 alt1\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 0.5em 0 1em;text-align: right;vertical-align: baseline;width: auto;background-color: white;border-right: 3px solid #6CE26C\">4<\/div>\n<div class=\"line number5 index4 alt2\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 0.5em 0 1em;text-align: right;vertical-align: baseline;width: auto;background-color: white;border-right: 3px solid #6CE26C\">5<\/div>\n<div class=\"line number6 index5 alt1\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 0.5em 0 1em;text-align: right;vertical-align: baseline;width: auto;background-color: white;border-right: 3px solid #6CE26C\">6<\/div>\n<div class=\"line number7 index6 alt2\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 0.5em 0 1em;text-align: right;vertical-align: baseline;width: auto;background-color: white;border-right: 3px solid #6CE26C\">7<\/div>\n<\/td>\n<td class=\"code\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: 100%\">\n<div class=\"container\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto\">\n<div class=\"line number1 index0 alt2\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 1em;text-align: left;vertical-align: baseline;width: auto;background-color: white\"><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: black\">-(<\/code><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: bold;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: #006699\">void<\/code><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: black\">)viewDidAppear {<\/code><\/div>\n<div class=\"line number2 index1 alt1\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 1em;text-align: left;vertical-align: baseline;width: auto;background-color: white\"><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: black\">[<\/code><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: bold;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: #006699\">super<\/code> <code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: black\">viewDidAppear];<\/code><\/div>\n<div class=\"line number3 index2 alt2\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 1em;text-align: left;vertical-align: baseline;width: auto;background-color: white\"><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: black\">[[<\/code><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: bold;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: #006699\">NSNotificationCenter<\/code> <code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: black\">defaultCenter] addObserver:<\/code><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: bold;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: #006699\">self<\/code><\/div>\n<div class=\"line number4 index3 alt1\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 1em;text-align: left;vertical-align: baseline;width: auto;background-color: white\"><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: black\">selector:<\/code><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: bold;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: #006699\">@selector<\/code><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: black\">(handleSyncSlideshowNotification:)<\/code><\/div>\n<div class=\"line number5 index4 alt2\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 1em;text-align: left;vertical-align: baseline;width: auto;background-color: white\"><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: black\">name:@\u201dSyncSlideshowNotification\u201d<\/code><\/div>\n<div class=\"line number6 index5 alt1\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 1em;text-align: left;vertical-align: baseline;width: auto;background-color: white\"><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: black\">object:<\/code><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: bold;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: #006699\">nil<\/code><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: black\">];<\/code><\/div>\n<div class=\"line number7 index6 alt2\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 1em;text-align: left;vertical-align: baseline;width: auto;background-color: white\"><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: black\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>In your main display\u2019s view controller:<\/p>\n<div>\n<div class=\"syntaxhighlighter  objc\" style=\"font-size: 1em;margin: 1em 0;overflow: auto;width: 100%;background-color: white\">\n<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: 100%\">\n<tbody>\n<tr style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto\">\n<td class=\"gutter\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: #AFAFAF\">\n<div class=\"line number1 index0 alt2\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 0.5em 0 1em;text-align: right;vertical-align: baseline;width: auto;background-color: white;border-right: 3px solid #6CE26C\">1<\/div>\n<div class=\"line number2 index1 alt1\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 0.5em 0 1em;text-align: right;vertical-align: baseline;width: auto;background-color: white;border-right: 3px solid #6CE26C\">2<\/div>\n<div class=\"line number3 index2 alt2\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 0.5em 0 1em;text-align: right;vertical-align: baseline;width: auto;background-color: white;border-right: 3px solid #6CE26C\">3<\/div>\n<div class=\"line number4 index3 alt1\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 0.5em 0 1em;text-align: right;vertical-align: baseline;width: auto;background-color: white;border-right: 3px solid #6CE26C\">4<\/div>\n<\/td>\n<td class=\"code\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: 100%\">\n<div class=\"container\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto\">\n<div class=\"line number1 index0 alt2\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 1em;text-align: left;vertical-align: baseline;width: auto;background-color: white\"><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: black\">[[<\/code><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: bold;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: #006699\">NSNotificationCenter<\/code> <code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: black\">defaultCenter]<\/code><\/div>\n<div class=\"line number2 index1 alt1\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 1em;text-align: left;vertical-align: baseline;width: auto;background-color: white\"><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: black\">postNotificationName:@\u201dSyncSlideshowNotification\u201d<\/code><\/div>\n<div class=\"line number3 index2 alt2\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 1em;text-align: left;vertical-align: baseline;width: auto;background-color: white\"><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: black\">object:<\/code><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: bold;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: #006699\">nil<\/code><\/div>\n<div class=\"line number4 index3 alt1\" style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0 1em;text-align: left;vertical-align: baseline;width: auto;background-color: white\"><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: black\">userInfo:yourParameters]; <\/code><code style=\"background: none repeat scroll 0 0 transparent;border: 0 none;float: none;font-family: 'Consolas','Bitstream Vera Sans Mono','Courier New',Courier,monospace;font-size: 1em;font-style: normal;font-weight: normal;height: auto;line-height: 1.1em;margin: 0;overflow: visible;padding: 0;text-align: left;vertical-align: baseline;width: auto;color: #008200\">\/\/ as (NSDictionary*)<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>You can run into race conditions using notifications if you\u2019re not careful. Still, we feel this is the right way to keep this feature from turning your code into a rat\u2019s nest.<\/p>\n<p><strong>Tip #4: Don\u2019t use a XIB file to create your view<\/strong><br \/>\nOnce you leave the walled garden of developing views for iOS devices, you\u2019re dealing with a wide variety of resolutions. XIB files are convenient when creating a view of fixed size. We recommend creating and positioning your subviews in your <code>viewDidLoad<\/code> method according to the size of your external <code>UIWindow<\/code>.<\/p>\n<p><strong>Tip #5: No one knows about screen mirroring. Make it as obvious as possible how to turn it on.<\/strong><br \/>\nFor such a cool feature, it is somewhat astounding how few people know that it exists or how to turn it on. When we <a href=\"https:\/\/redfin.com\/blog\/2012\/04\/redfins_iphone_and_ipad_app_goes_native_.html\">announced screen mirroring on our blog<\/a>, one of the first comments in the post was asking how to enable it. And we don\u2019t blame these users in the slightest. There\u2019s no way to turn screen mirroring on from within an app, but Apple provides <a href=\"http:\/\/support.apple.com\/kb\/HT5209?viewlocale=en_US\">instructions<\/a> to turn it on. As it turns out, this setting is located in one of the most inconspicuous spots in the entire operating system. After telling one of our friends at Apple about the new feature, he promptly emailed us back asking how to turn it on. This is one area where Apple has let down their users and developers. We hope to make up for it by giving users more instruction on how to enable screen mirroring in the next release of our own app.<\/p>\n<p>Those are some of the lessons we learned developing our own screen mirroring experience for AirPlay. If you have any tips of your own, please leave a comment below.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Back in March, while everyone was waiting for the new iPad with bated breath, we heard rumblings of a 3rd-generation Apple TV. We\u2019re always trying to find new ways to wow our users, and creating a dual-screen AirPlay experience with Apple TV seemed like a great opportunity to do just that. In the last major [&hellip;]<\/p>\n","protected":false},"author":13476,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[57],"tags":[],"dashboard":[],"coauthors":[],"class_list":["post-770","post","type-post","status-publish","format-standard","hentry","category-company-news"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.7 (Yoast SEO v27.6) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Creating a Dual-Screen AirPlay Experience for iOS and Apple TV - Redfin Real Estate News<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.redfin.com\/news\/creating_a_dual-screen_airplay_experience_for_ios_and_apple_tv\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Creating a Dual-Screen AirPlay Experience for iOS and Apple TV\" \/>\n<meta property=\"og:description\" content=\"Back in March, while everyone was waiting for the new iPad with bated breath, we heard rumblings of a 3rd-generation Apple TV. We\u2019re always trying to find new ways to wow our users, and creating a dual-screen AirPlay experience with Apple TV seemed like a great opportunity to do just that. In the last major [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.redfin.com\/news\/creating_a_dual-screen_airplay_experience_for_ios_and_apple_tv\/\" \/>\n<meta property=\"og:site_name\" content=\"Redfin Real Estate News\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/redfin\" \/>\n<meta property=\"article:published_time\" content=\"2012-05-07T16:00:45+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-10-05T20:12:25+00:00\" \/>\n<meta name=\"author\" content=\"Seth Goldenberg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@redfin\" \/>\n<meta name=\"twitter:site\" content=\"@redfin\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Seth Goldenberg\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.redfin.com/news\\\/creating_a_dual-screen_airplay_experience_for_ios_and_apple_tv\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.redfin.com/news\\\/creating_a_dual-screen_airplay_experience_for_ios_and_apple_tv\\\/\"},\"author\":{\"name\":\"Seth Goldenberg\",\"@id\":\"https:\\\/\\\/www.redfin.com/news\\\/#\\\/schema\\\/person\\\/aee23a089265b77a9f5a79bedd7c1137\"},\"headline\":\"Creating a Dual-Screen AirPlay Experience for iOS and Apple TV\",\"datePublished\":\"2012-05-07T16:00:45+00:00\",\"dateModified\":\"2020-10-05T20:12:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.redfin.com/news\\\/creating_a_dual-screen_airplay_experience_for_ios_and_apple_tv\\\/\"},\"wordCount\":1376,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.redfin.com/news\\\/#organization\"},\"articleSection\":[\"Company News\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.redfin.com/news\\\/creating_a_dual-screen_airplay_experience_for_ios_and_apple_tv\\\/#respond\"]}],\"copyrightYear\":\"2012\",\"copyrightHolder\":{\"@id\":\"https:\\\/\\\/www.redfin.com/news\\\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.redfin.com/news\\\/creating_a_dual-screen_airplay_experience_for_ios_and_apple_tv\\\/\",\"url\":\"https:\\\/\\\/www.redfin.com/news\\\/creating_a_dual-screen_airplay_experience_for_ios_and_apple_tv\\\/\",\"name\":\"Creating a Dual-Screen AirPlay Experience for iOS and Apple TV - Redfin Real Estate News\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.redfin.com/news\\\/#website\"},\"datePublished\":\"2012-05-07T16:00:45+00:00\",\"dateModified\":\"2020-10-05T20:12:25+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.redfin.com/news\\\/creating_a_dual-screen_airplay_experience_for_ios_and_apple_tv\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.redfin.com/news\\\/creating_a_dual-screen_airplay_experience_for_ios_and_apple_tv\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.redfin.com/news\\\/creating_a_dual-screen_airplay_experience_for_ios_and_apple_tv\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.redfin.com/news\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Creating a Dual-Screen AirPlay Experience for iOS and Apple TV\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.redfin.com/news\\\/#website\",\"url\":\"https:\\\/\\\/www.redfin.com/news\\\/\",\"name\":\"Redfin Real Estate News\",\"description\":\"The latest real estate news and research from technology-powered residential real estate company, Redfin.\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.redfin.com/news\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.redfin.com/news\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.redfin.com/news\\\/#organization\",\"name\":\"Redfin\",\"url\":\"https:\\\/\\\/www.redfin.com/news\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.redfin.com/news\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.redfin.com\\\/news\\\/wp-content\\\/uploads\\\/2020\\\/10\\\/Redfin-News-Logo.png\",\"contentUrl\":\"https:\\\/\\\/www.redfin.com\\\/news\\\/wp-content\\\/uploads\\\/2020\\\/10\\\/Redfin-News-Logo.png\",\"width\":1100,\"height\":235,\"caption\":\"Redfin\"},\"image\":{\"@id\":\"https:\\\/\\\/www.redfin.com/news\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/redfin\",\"https:\\\/\\\/x.com\\\/redfin\",\"https:\\\/\\\/www.instagram.com\\\/redfinrealestate\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/redfin\",\"https:\\\/\\\/www.pinterest.com\\\/redfin\\\/\",\"https:\\\/\\\/en.wikipedia.org\\\/wiki\\\/Redfin\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.redfin.com/news\\\/#\\\/schema\\\/person\\\/aee23a089265b77a9f5a79bedd7c1137\",\"name\":\"Seth Goldenberg\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b8775a8103d79e71731626d2db93c5c22ff7c71f018b7a83f7d001645fdbb9c8?s=96&d=wp_user_avatar&r=g5fb8b4780e9d03eb6b17f90e099f6194\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b8775a8103d79e71731626d2db93c5c22ff7c71f018b7a83f7d001645fdbb9c8?s=96&d=wp_user_avatar&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b8775a8103d79e71731626d2db93c5c22ff7c71f018b7a83f7d001645fdbb9c8?s=96&d=wp_user_avatar&r=g\",\"caption\":\"Seth Goldenberg\"},\"url\":\"https:\\\/\\\/www.redfin.com/news\\\/author\\\/seth-goldenbergredfin-com\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Creating a Dual-Screen AirPlay Experience for iOS and Apple TV - Redfin Real Estate News","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.redfin.com\/news\/creating_a_dual-screen_airplay_experience_for_ios_and_apple_tv\/","og_locale":"en_US","og_type":"article","og_title":"Creating a Dual-Screen AirPlay Experience for iOS and Apple TV","og_description":"Back in March, while everyone was waiting for the new iPad with bated breath, we heard rumblings of a 3rd-generation Apple TV. We\u2019re always trying to find new ways to wow our users, and creating a dual-screen AirPlay experience with Apple TV seemed like a great opportunity to do just that. In the last major [&hellip;]","og_url":"https:\/\/www.redfin.com\/news\/creating_a_dual-screen_airplay_experience_for_ios_and_apple_tv\/","og_site_name":"Redfin Real Estate News","article_publisher":"https:\/\/www.facebook.com\/redfin","article_published_time":"2012-05-07T16:00:45+00:00","article_modified_time":"2020-10-05T20:12:25+00:00","author":"Seth Goldenberg","twitter_card":"summary_large_image","twitter_creator":"@redfin","twitter_site":"@redfin","twitter_misc":{"Written by":"Seth Goldenberg","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.redfin.com\/news\/creating_a_dual-screen_airplay_experience_for_ios_and_apple_tv\/#article","isPartOf":{"@id":"https:\/\/www.redfin.com\/news\/creating_a_dual-screen_airplay_experience_for_ios_and_apple_tv\/"},"author":{"name":"Seth Goldenberg","@id":"https:\/\/www.redfin.com\/news\/#\/schema\/person\/aee23a089265b77a9f5a79bedd7c1137"},"headline":"Creating a Dual-Screen AirPlay Experience for iOS and Apple TV","datePublished":"2012-05-07T16:00:45+00:00","dateModified":"2020-10-05T20:12:25+00:00","mainEntityOfPage":{"@id":"https:\/\/www.redfin.com\/news\/creating_a_dual-screen_airplay_experience_for_ios_and_apple_tv\/"},"wordCount":1376,"commentCount":0,"publisher":{"@id":"https:\/\/www.redfin.com\/news\/#organization"},"articleSection":["Company News"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.redfin.com\/news\/creating_a_dual-screen_airplay_experience_for_ios_and_apple_tv\/#respond"]}],"copyrightYear":"2012","copyrightHolder":{"@id":"https:\/\/www.redfin.com\/news\/#organization"}},{"@type":"WebPage","@id":"https:\/\/www.redfin.com\/news\/creating_a_dual-screen_airplay_experience_for_ios_and_apple_tv\/","url":"https:\/\/www.redfin.com\/news\/creating_a_dual-screen_airplay_experience_for_ios_and_apple_tv\/","name":"Creating a Dual-Screen AirPlay Experience for iOS and Apple TV - Redfin Real Estate News","isPartOf":{"@id":"https:\/\/www.redfin.com\/news\/#website"},"datePublished":"2012-05-07T16:00:45+00:00","dateModified":"2020-10-05T20:12:25+00:00","breadcrumb":{"@id":"https:\/\/www.redfin.com\/news\/creating_a_dual-screen_airplay_experience_for_ios_and_apple_tv\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.redfin.com\/news\/creating_a_dual-screen_airplay_experience_for_ios_and_apple_tv\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.redfin.com\/news\/creating_a_dual-screen_airplay_experience_for_ios_and_apple_tv\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.redfin.com\/news\/"},{"@type":"ListItem","position":2,"name":"Creating a Dual-Screen AirPlay Experience for iOS and Apple TV"}]},{"@type":"WebSite","@id":"https:\/\/www.redfin.com\/news\/#website","url":"https:\/\/www.redfin.com\/news\/","name":"Redfin Real Estate News","description":"The latest real estate news and research from technology-powered residential real estate company, Redfin.","publisher":{"@id":"https:\/\/www.redfin.com\/news\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.redfin.com\/news\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.redfin.com\/news\/#organization","name":"Redfin","url":"https:\/\/www.redfin.com\/news\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.redfin.com\/news\/#\/schema\/logo\/image\/","url":"https:\/\/www.redfin.com\/news\/wp-content\/uploads\/2020\/10\/Redfin-News-Logo.png","contentUrl":"https:\/\/www.redfin.com\/news\/wp-content\/uploads\/2020\/10\/Redfin-News-Logo.png","width":1100,"height":235,"caption":"Redfin"},"image":{"@id":"https:\/\/www.redfin.com\/news\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/redfin","https:\/\/x.com\/redfin","https:\/\/www.instagram.com\/redfinrealestate\/","https:\/\/www.linkedin.com\/company\/redfin","https:\/\/www.pinterest.com\/redfin\/","https:\/\/en.wikipedia.org\/wiki\/Redfin"]},{"@type":"Person","@id":"https:\/\/www.redfin.com\/news\/#\/schema\/person\/aee23a089265b77a9f5a79bedd7c1137","name":"Seth Goldenberg","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/b8775a8103d79e71731626d2db93c5c22ff7c71f018b7a83f7d001645fdbb9c8?s=96&d=wp_user_avatar&r=g5fb8b4780e9d03eb6b17f90e099f6194","url":"https:\/\/secure.gravatar.com\/avatar\/b8775a8103d79e71731626d2db93c5c22ff7c71f018b7a83f7d001645fdbb9c8?s=96&d=wp_user_avatar&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b8775a8103d79e71731626d2db93c5c22ff7c71f018b7a83f7d001645fdbb9c8?s=96&d=wp_user_avatar&r=g","caption":"Seth Goldenberg"},"url":"https:\/\/www.redfin.com\/news\/author\/seth-goldenbergredfin-com\/"}]}},"_links":{"self":[{"href":"https:\/\/www.redfin.com\/news\/wp-json\/wp\/v2\/posts\/770","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.redfin.com\/news\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.redfin.com\/news\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.redfin.com\/news\/wp-json\/wp\/v2\/users\/13476"}],"replies":[{"embeddable":true,"href":"https:\/\/www.redfin.com\/news\/wp-json\/wp\/v2\/comments?post=770"}],"version-history":[{"count":0,"href":"https:\/\/www.redfin.com\/news\/wp-json\/wp\/v2\/posts\/770\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.redfin.com\/news\/wp-json\/wp\/v2\/media?parent=770"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.redfin.com\/news\/wp-json\/wp\/v2\/categories?post=770"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.redfin.com\/news\/wp-json\/wp\/v2\/tags?post=770"},{"taxonomy":"dashboard","embeddable":true,"href":"https:\/\/www.redfin.com\/news\/wp-json\/wp\/v2\/dashboard?post=770"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.redfin.com\/news\/wp-json\/wp\/v2\/coauthors?post=770"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}