Plein écran: AVPlayerLayer n'est pas redimensionné lors du redimensionnement de sa vue parent
Je suis en train d'élaborer un lecteur vidéo avec le AVPlayer API de AV de la Fondation dans MonoTouch (mais une solution objective-c pourrait être sympa aussi). Je suis en train de mettre en œuvre un mode plein écran.
Pour afficher les images de la vidéo, j'ai une UIView (appelons ça de la lecture à vue) où j'ai ajouté la AVPlayerLayer comme sous-vue de la lecture couche de la vue:
UIView *playbackView = ...
AVPlayerLayer *playerLayer = ...
[playbackView.layer addSublayer:playerLayer];
la couche de propriétés sont définies comme suit:
playerLayer.needsDisplayOnBoundsChange = YES;
playbackView.layer.needsDisplayOnBoundsChange = YES;
pour être sûr qu'ils sont redimensionnées si la lecture de la taille d'affichage est modifié. D'abord, la lecture à vue a les coordonnées (0, 0, 320, 180) (seuls les affiché au haut de l'INTERFACE utilisateur). Ensuite, je fais un plein écran de l'animation par le réglage de la lecture à vue taille de l'image comme étant la taille de la fenêtre:
playbackView.frame = playbackView.window.bounds;
Il fonctionne très bien. La lecture à vue est maintenant remplir toute la fenêtre (définir une couleur d'arrière-plan pour le voir). Mais mon AVPlayerLayer est toujours rester au sommet de la vue comme précédemment, dans la non-mode plein écran.
Pourquoi le AVPlayer couche n'est pas redimensionnée en fonction de la lecture à vue nouvelle taille? Je dois faire une animation sur le AVPlayerLayer ainsi? Une actualisation avec setNeedsLayout, layoutSubviews (il ne semble pas changer quelque chose...)? Supprimer la AVPlayerLayer et l'ajouter à nouveau?
source d'informationauteur nicolas
Vous devez vous connecter pour publier un commentaire.
Ne pas ajouter de la sous-couche. Utilisez simplement playbackView de la couche de AVPlayerLayer, comme ceci:
Voir AV Foundation Guide de Programmation - La Vue Du Lecteur
Dans le cas où vous ajoutez AVPlayerLayer comme sous-couche, vous devez mettre à jour son cadre
Il y a une meilleure façon d'atteindre cet objectif. Voici
AVPlayerLayer
adossés à vue, c'est d'essayer de garder le ratio d'aspect de vidéo. Utilisez simplement mise en page automatique, comme d'habitude.PlayerView.h:
PlayerView.m:
Et la même solution sur
Swift
: