2012-04-08 5 views
9

airplay의 디자인/건축 관련 질문.에어 플레이 : 외부 창에서 거울 서브 뷰

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

가, TV 빨간색으로 빈 화면을 잘 보여줍니다 작품 : 나는 설정에게 AppDelegate에의 외부 디스플레이가 있습니다. 이제 여러 개의 하위 뷰가있는 ViewController가 있으며 한 화면은 외부 화면에 표시되어야합니다. 나는이 ViewController.m에서 시도하는 경우 :

[_appDelegate.externalWindow addSubview:self.deviceAndTVView]; 

deviceAndTVView은 외부 화면에 표시하지 장치에 더 이상 것입니다. 디바이스에서 deviceAndTVView를 사용하고 터치/사용자 상호 작용시 자체를 업데이트하고 외부 화면에서 해당 업데이트를 미러링하면됩니다.

이 작업을 수행하는 올바른 경로는 무엇입니까?

읽어 주셔서 감사합니다. m

답변

14

AirPlay 미러링이라는 기술의 이름이 잘못 지정되었습니다. 실제로는 전체 iOS 장치가 AirPlay 장치에 미러링되는 모드와 미러링 AirPlay 장치가 연결된 다른 모드에서 개발자가 두 개의 UIWindow/UIScreen을 사용할 수있는 두 가지 모드로 작동합니다.

종종 "미러링"이라고하는 후자 모드를 사용하고 있지만 실제로는 완전히 별도의 창/화면을 관리해야하며이 작동 모드를 참조하는 데 더 나은 용어가 있어야합니다.

위에서 설명한 내용은 기본적으로 입니다. UIView를 장치 창에서 AirPlay 창으로 이동하면 올바르게 작동합니다.

단일 인스턴스 인을 두 창 모두에 표시하는 기술적 인 방법은 없습니다. 하나의 UIView 계층 구조에 있거나 둘 다 동시에 존재하지는 않습니다. 즉, 동일한 화면을 두 화면에 모두 표시하려면 동일한 UIView의 두 인스턴스을 으로 만들고 두 개의 창에 각각 추가 한 다음 두 창을 모두 변경하면서 업데이트해야합니다.

예상치 못한 "미러링"이 아니지만 UIView의 AirPlay 디바이스와 다른 종횡비가있을 수 있기 때문에 좋은 결과 일 수 있습니다. 동일한 내용을 보여주는 두 가지보기가 있으므로 장치의 사용 가능한 해상도를 최대한 활용하여 AirPlay보기의 크기를 조정할 수 있습니다.

+0

감사합니다. 두 개의 뷰를 생성하고 병렬로 관리하는 것이 유일한 옵션입니다. 관심있는 사람은 Apples documentation [here] (http://developer.apple.com/library/ios/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/CreatingWindows/CreatingWindows.html#//apple_ref/doc/uid/)에 설명되어 있습니다. TP40009503-CH4-SW9)에서 "외부 디스플레이에 내용 표시"를 참조하십시오. – marimba

+0

iOS 7부터 스냅 샷 API를 사용하여 다른 화면에 특정 UIView를 표시 할 수 있어야합니다. – jjxtra

1

나는 이것을하는 몇 가지 방법을 생각할 수 있습니다. 당신은 KVO를 사용하여 이것을 보았습니까? 로컬 뷰와 외부 뷰 모두 컨텐트를 주도하는 모델이나 컨트롤러를 관찰 할 수 있습니다.