2010-04-18 9 views

Odpowiedz

35

szukałem samo jesteś. W ostatni weekend napisałem małą kategorię UIApplication dodać mirroring wsparcie. Opublikowałem do kodu na Google Code.

http://code.google.com/p/iphoneos-screen-mirroring/

aby go użyć, po prostu trzeba go ustawić w aplikacji danej aplikacji delegata dokończył lauching tak:.

[[UIApplication sharedApplication] setupScreenMirroringOfMainWindow:mainWindow framesPerSecond:20]; 

Miałem tylko jedną szansę wypróbowania tego w zeszły weekend na dużym telewizorze z kablami wyjściowymi Apple AV. Wydajność nie jest gwiezdna, więc nie zalecałbym używania klatek na sekundę wyższych niż 30 klatek na sekundę ...

+0

Nie działa tutaj Tylko czarny ekran z [[UIApplication sharedApplication] setupScreenMirroringOfMainWindow: ramki okienPerSecond: 20]; Jak można mogę debugować za pomocą adaptera VGA na iPadzie? – x2on

+0

Nowa wersja działa z [[UIApplication sharedApplication] setupScreenMirroringWithFramesPerSecond: 20.0]; ale jest bardzo powolny. – x2on

+0

Pchnąłem nową wersję, która kopiuje bezpośrednio za pomocą CALayer. Zobaczę, czy wydajność jest lepsza jutro (nie mogłem wypróbować tej nocy, gdy zniknął dev iPad). –

3

Każdy obiekt UIWindow (w zasadzie widok najwyższego poziomu) ma przypisany ekran (UIScreen) i można oczywiście ustawić żądany ekran. Dlatego przeniesienie głównej zawartości na drugi ekran jest łatwe, ale tworzenie kopii lustrzanych jest trudne. (Jeśli nie chcesz wykładu o tym, dlaczego jest brzydki, przejdź do następnego akapitu). Sądzę, że jest to intencja jabłka, zarówno dlatego, że rysujesz to samo dwa razy, jeden z DUŻĄ większą rozdzielczością, a także z powodu doświadczenia oglądania interfejsu przed wejście w tryb prezentacji jest raczej kiepskie w porównaniu do oglądania niczego, dopóki wideo nie jest odtwarzane, rozpoczęła się prezentacja słów kluczowych itp. Jest to coś, co oczywiście chcesz rozważyć na podstawie poszczególnych przypadków, ale niemniej jednak tworzenie kopii lustrzanych to zły pomysł.

UIWindow dziedziczy z UIView, więc chociaż nie mam zbyt dużego doświadczenia w tej sprawie, nadal powinieneś być w stanie go narysować w jakimś kontekście bitmapowym, a następnie użyć dwóch różnych okien UIWindows z tylko widok obrazu na nich przesuwający rzeczywiste piksele do odpowiednich ekranów. Jest to znacznie łatwiejsze, jeśli chcesz tylko zarchiwizować jeden określony widok niestandardowy (bez uwzględniania jego podwładnych), ponieważ możesz mieć ten widok na ekranie urządzenia (aby uchwycić dowolne dane wejściowe), a następnie zaprojektować go w taki sposób, w jaki masz metodę Aby wywołać, aby narysować go w jakimkolwiek kontekście jest on (niektóre drawRect może działać bez zarzutu tak jak jest) i wywołanie, że z super specjalnego niesamowite niestandardowe subview na drugim ekranie, który wdroży drawRect, aby po prostu wywołać metodę w rzeczywistym widoku.

Nadzieja to pomaga, przykro mi ranted trochę :(

+0

Dlaczego mówisz "jeden o DUŻO wyższej rozdzielczości"? Właśnie wczoraj zacząłem podłączać się do projektora i domyślnie 1024x768, który jest taki sam jak iPad. Domyślam się, że to odzwierciedlenie, chyba że aplikacja zdecydowała się wyświetlić coś innego na zewnątrz. Byłoby naprawdę słodko, gdyby popisywać się koncepcjami aplikacji. – jamone

+0

Chociaż zgadzam się, że byłoby fajnie popisywać się aplikacjami, należy pamiętać, że Apple nie uważa, że ​​ludzie będą używać tego przede wszystkim: P Jednak jeśli nie masz nic przeciwko wyświetlaniu ekranu iPad po podłączeniu do zewnętrznego wyświetlacza bardzo łatwo przenosi główny interfejs UIWindow na inny ekran UIScreen - http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIScreen_Class/Reference/UIScreen .html –

+0

Czy działa na symulatorze 4.2? Próbowałem użyć tego kodu na symulatorze z wyjściem telewizyjnym .. ale nic się nie pokazuje .. :( – Hisenberg

5

Myślę, że warto dodać, że framework QuartzCore jest obowiązkowy, lub będziesz mieć 4 błędy podczas kompilacji .

Undefined symbols: 
    "_CATransform3DMakeRotation", referenced from: 
     -[UIApplication(ScreenMirroring) updateMirroredWindowTransformForInterfaceOrientation:] in UIApplication+ScreenMirroring.o 
     -[UIApplication(ScreenMirroring) updateMirroredWindowTransformForInterfaceOrientation:] in UIApplication+ScreenMirroring.o 
     -[UIApplication(ScreenMirroring) updateMirroredWindowTransformForInterfaceOrientation:] in UIApplication+ScreenMirroring.o 
    "_kCAGravityResizeAspect", referenced from: 
     _kCAGravityResizeAspect$non_lazy_ptr in UIApplication+ScreenMirroring.o 
    (maybe you meant: _kCAGravityResizeAspect$non_lazy_ptr) 
    "_OBJC_CLASS_$_CADisplayLink", referenced from: 
     objc-class-ref-to-CADisplayLink in UIApplication+ScreenMirroring.o 
    "_CATransform3DIdentity", referenced from: 
     _CATransform3DIdentity$non_lazy_ptr in UIApplication+ScreenMirroring.o 
    (maybe you meant: _CATransform3DIdentity$non_lazy_ptr) 
ld: symbol(s) not found 
collect2: ld returned 1 exit status 
Powiązane problemy