2012-04-08 84 views
9

關於airplay的設計/建築問題。 我已經安裝在AppDelegate中的外部顯示:Airplay:外部窗口的鏡子視圖

UIScreen *externalScreen = UIScreen.screens.lastObject; 
self.externalWindow = [[UIWindow alloc] initWithFrame:externalScreenFrame]; 
self.externalWindow.screen = externalScreen; 
self.externalWindow.backgroundColor = [UIColor redColor]; 

工作正常,電視顯示空白屏幕爲紅色。 現在我有一個ViewController與一堆子視圖,一個視圖應顯示在設備外部屏幕上。如果我試試這個在ViewController.m:

[_appDelegate.externalWindow addSubview:self.deviceAndTVView]; 

deviceAndTVView將只顯示在外部屏幕上,而不是在設備上了。 我需要的是在設備上安裝deviceAndTVView,通過觸摸/用戶交互進行更新,並在外部屏幕上對這些更新進行鏡像。

哪一條是正確的?

感謝您的閱讀! m

回答

14

這項名爲AirPlay鏡像的技術名字很差。它實際上以兩種模式運行,一種是整個iOS設備鏡像到AirPlay設備,另一種是連接鏡像AirPlay設備的另一種模式,開發人員有兩個UIWindow/UIScreen可以使用。

您使用的是後一種模式,通常稱爲「鏡像」,但實際上您有一個完全獨立的窗口/屏幕進行管理,應該有更好的術語來指代這種操作模式。

你上面描述的做法基本上是移動一個UIView從設備窗口到AirPlay窗口,它的工作原理與它應該完全一樣!

有你有關於這兩個窗口的一個UIView秀單個實例沒有技術的方式 - 它會在一個UIView的層次或其他,但不能同時存在,在同一時間。換句話說,如果您希望在兩個屏幕上都顯示相同的內容,則需要創建同一UIView的兩個實例,並將它們分別添加到兩個窗口中,然後在更改它們時更新它們。

雖然這可能不是您期待的超級信服者「鏡像」,但它可能是一件好事,因爲您的UIView在設備上的縱橫比可能會不同於AirPlay設備上的縱橫比。通過顯示兩個不同的視圖,顯示相同的內容,您可以調整AirPlay視圖的大小,以充分利用設備的可用分辨率。

+0

謝謝,你說得對。創建兩個視圖並且並行管理是唯一的選擇。對於任何感興趣的人,這在蘋果文檔[這裏]中描述(http://developer.apple.com/library/ios/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/CreatingWindows/CreatingWindows.html#//apple_ref/doc/uid/ 「在外部顯示器上顯示內容」下的TP40009503-CH4-SW9)。 – marimba 2012-06-05 14:27:23

+0

從iOS 7開始,您應該可以使用快照API在其他屏幕上顯示特定的UIView – jjxtra 2015-03-09 02:07:35

1

我可以考慮幾種方法來做到這一點。你看過使用KVO嗎?本地和外部視圖都可以觀察到任何模型或控制器正在驅動其內容。