Estoy desarrollando un reproductor de video con AVPlayer API de AV Foundation en MonoTouch (pero una solución en Object-c también podría ser agradable). Estoy tratando de implementar un modo de pantalla completa.Pantalla completa: AVPlayerLayer no se redimensiona al cambiar el tamaño de su vista principal
Para mostrar los fotogramas de vídeo, tengo un UIView (vamos a llamarlo vista de reproducción) en la que he añadido el AVPlayerLayer como subvista de la capa de vista de reproducción:
UIView *playbackView = ...
AVPlayerLayer *playerLayer = ...
[playbackView.layer addSublayer:playerLayer];
las propiedades de capa se establecen así:
playerLayer.needsDisplayOnBoundsChange = YES;
playbackView.layer.needsDisplayOnBoundsChange = YES;
para asegurarse de que cambian de tamaño si se cambia el tamaño de la vista de reproducción. Inicialmente, la vista de reproducción tiene las coordenadas (0, 0, 320, 180) (solo se muestra en la parte superior de la IU). Entonces, estoy haciendo una animación en pantalla completa ajustando el tamaño del marco vista de reproducción como el tamaño de la ventana:
playbackView.frame = playbackView.window.bounds;
Es funciona bien. La vista de reproducción ahora está llenando toda la ventana (establece un color de fondo para verla). Pero mi AVPlayerLayer aún se mantiene en la parte superior de la vista como anteriormente en el modo de pantalla completa.
¿Por qué la capa AVPlayer no se redimensiona de acuerdo con la nueva vista? ¿Debo hacer una animación en AVPlayerLayer también? Una actualización con setNeedsLayout, layoutSubviews (no parece cambiar algo ...)? ¿Quitar AVPlayerLayer y agregarlo de nuevo?
Una solución es para cambiar el tamaño también la trama de capa de acuerdo con el marco de vista de reproducción durante la animación (playerLayer.frame = playbackView.frame). Pero si hacemos eso, la capa no se anima sino que se muestra directamente con el tamaño final. ¿Cómo podemos animar también este cambio? Use Core Animation en lugar de animación UIView? – nicolas