2012-04-08 21 views
9

một câu hỏi thiết kế/kiến ​​trúc về phát sóng. Tôi đã thiết lập màn hình bên ngoài trong AppDelegate:Airplay: Gương subview trên cửa sổ bên ngoài

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

Hoạt động tốt, TV hiển thị màn hình trống màu đỏ. Bây giờ tôi có một ViewController với một loạt các subviews, và một view sẽ được hiển thị trên thiết bị màn hình ngoài. Nếu tôi thử điều này trong ViewController.m:

[_appDelegate.externalWindow addSubview:self.deviceAndTVView]; 

thiết bịAndTVView sẽ chỉ hiển thị trên màn hình ngoài, không còn trên thiết bị nữa. Điều tôi cần là có thiết bịAndTVView trên thiết bị, tự cập nhật khi chạm vào/tương tác người dùng và phản chiếu những cập nhật đó trên màn hình bên ngoài.

Đó là con đường phù hợp để thực hiện điều đó?

Cảm ơn bạn đã đọc! m

Trả lời

14

Công nghệ được gọi là Phản chiếu AirPlay kém tên. Nó thực sự hoạt động ở hai chế độ, một nơi mà toàn bộ thiết bị iOS được nhân đôi với thiết bị AirPlay và ở chế độ khác khi thiết bị AirPlay phản chiếu được kết nối, nhà phát triển có hai UIWindow/UIScreen để làm việc.

Bạn đang sử dụng chế độ thứ hai, thường được gọi là "phản chiếu", nhưng thực sự bạn có một cửa sổ/màn hình hoàn toàn riêng để quản lý và phải có thuật ngữ tốt hơn để tham khảo phương thức hoạt động này.

Điều bạn mô tả ở trên về cơ bản là di chuyển một UIView từ cửa sổ thiết bị sang cửa sổ AirPlay và nó hoạt động chính xác như bình thường!

Không có cách nào kỹ thuật để bạn có thể hiển thị ví dụ của chương trình UIView trên cả hai cửa sổ này - nó sẽ tồn tại trong một hệ thống phân cấp UIView hoặc khác, nhưng không phải cả hai cùng một lúc. Nói cách khác, nếu bạn muốn cùng một thứ hiển thị trên cả hai màn hình, bạn cần tạo hai trường hợp của cùng một UIView và thêm chúng tương ứng vào hai cửa sổ và sau đó cập nhật cả hai cửa sổ khi chúng thay đổi.

Trong khi điều này có thể không phải là siêu phản chiếu "phản chiếu" bạn đang mong đợi, có thể đó là điều tốt vì UIView của bạn có thể có tỷ lệ khung hình khác nhau trên thiết bị so với trên thiết bị AirPlay. Bằng cách có hai chế độ xem khác nhau, hiển thị cùng một nội dung, bạn có thể điều chỉnh kích thước của chế độ xem AirPlay để sử dụng tốt nhất độ phân giải có sẵn của thiết bị.

+0

Cảm ơn, bạn đã đúng. Tạo hai chế độ xem và quản lý chúng song song là tùy chọn duy nhất. Đối với bất kỳ ai quan tâm, điều này được mô tả trong tài liệu về Apple [tại đây] (http://developer.apple.com/library/ios/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/CreatingWindows/CreatingWindows.html#//apple_ref/doc/uid/ TP40009503-CH4-SW9) trong "Hiển thị nội dung trên màn hình ngoài". – marimba

+0

Kể từ iOS 7, bạn sẽ có thể sử dụng API chụp nhanh để hiển thị UIView cụ thể trên màn hình khác – jjxtra

1

Tôi có thể nghĩ ra một vài cách để thực hiện việc này. Bạn đã xem xét sử dụng KVO cho điều này? Cả hai quan điểm địa phương và bên ngoài có thể quan sát bất kỳ mô hình hoặc bộ điều khiển nào đang thúc đẩy nội dung của chúng.