2010-04-18 17 views

Respuesta

35

que estaba buscando lo mismo que tú. La semana pasada escribí una pequeña categoría UIApplication añadir soporte de duplicación. Publiqué al código en Google Code.

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

para usarlo, simplemente tienes que configurarlo en aplicación de su delegado aplicación terminó lauching este modo:.

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

Solo tuve la oportunidad de probarlo el pasado fin de semana en un televisor de pantalla grande con los cables de salida Apple AV. El rendimiento no es estelar, por lo tanto, no recomendaría usar una velocidad de cuadros superior a 30 fps ...

+0

No funciona aquí. Solo pantalla en negro con [[UIApplication sharedApplication] setupScreenMirroringOfMainWindow: window framesPerSecond: 20]; ¿Cómo puedo hacerlo? ¿Depuro con VGA-Adapter en iPad? – x2on

+0

La nueva versión funciona con [[UIApplication sharedApplication] setupScreenMirroringWithFramesPerSecond: 20.0]; pero es muy lento – x2on

+0

He enviado una nueva versión que copia usando CALayer directamente. Veré si el rendimiento es mejor mañana (no podría intentarlo esta noche ya que el iPad dev se ha ido). –

3

Cada objeto UIWindow (básicamente la vista de nivel superior) tiene asignada una pantalla (UIScreen) y, por supuesto, puede configurar la pantalla que desee. Por lo tanto, mover el contenido principal a una segunda pantalla es fácil, pero la duplicación es difícil. (Si no quieres una conferencia sobre por qué es feo omitir hasta el siguiente párrafo) creo que esta es la intención de Apple, tanto porque dibujar la misma cosa dos veces, una con una resolución MUCHO más alta, y porque la experiencia de ver la interfaz antes ingresar el modo de presentación es bastante insatisfactorio en comparación con no ver nada hasta que se reproduce el video, la presentación de presentación ha comenzado, etc. Esto es algo que obviamente se debe considerar caso por caso, pero aun así reflejar es una mala idea.

UIWindow hereda de UIView, así que, aunque no tengo mucha experiencia personal con esta cosa exacta, aún debería ser capaz de dibujar en un contexto de mapa de bits de algún tipo, y luego usar dos ventanas UI diferentes con cada una solo una vista de imagen en un ellos empujando los píxeles reales a sus pantallas respectivas. Esto es considerablemente más fácil si solo desea reflejar una vista personalizada específica (y sin incluir sus subvistas) porque puede tener esa vista en la pantalla del dispositivo (para capturar cualquier entrada) y luego diseñarla de forma que tenga un método llamar para dibujarlo en cualquier contexto en el que esté (algunos drawRects podrían funcionar bien) y la llamada desde una subvista personalizada súper especial en la otra pantalla, que implementaría drawRect para simplemente llamar al método en la vista real.

Espero que esto ayude, lo siento, despotricó un poco :(

+0

¿Por qué dices "uno con una resolución MUCHO mayor"? Me acabo de enganchar a un proyector ayer y su valor predeterminado es 1024x768, que es lo mismo que el iPad. Desearía que se reflejara por defecto a menos que su aplicación decidiera mostrar algo más en el exterior. Sería realmente agradable mostrar los conceptos de las aplicaciones. – jamone

+0

Aunque estoy de acuerdo en que sería genial mostrar las aplicaciones, tenga en cuenta que Apple no cree que eso es lo que la gente va a usar principalmente para esto: P Sin embargo, si no le importa no ver la pantalla en el iPad cuando está conectado a una pantalla externa, es realmente fácil mover la ventana UI principal a la otra UIScreen - http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIScreen_Class/Reference/UIScreen .html –

+0

¿Funciona en el simulador 4.2? He intentado usar este código en el simulador con salida de TV ... pero nada aparece .. :( – Hisenberg

5

Creo que vale la pena agregar que el marco QuartzCore es obligatorio, o usted tendrá 4 errores en tiempo de compilación .

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 
Cuestiones relacionadas