Forcer le mode paysage sur plein écran MPMoviePlayerController empêche de rotation correct au moment de quitter le plein écran
J'ai une application iPhone (iOS6+) qui prend en charge tous interface orientations. Toutefois, seule l'orientation paysage doit être pris en charge lorsqu'un MPMoviePlayerController est la lecture d'une vidéo en plein écran.
J'ai trouvé la solution suivante sur Stack Overflow, et il fonctionne.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerWillEnterFullscreenNotification:) name:MPMoviePlayerWillEnterFullscreenNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerWillExitFullscreenNotification:) name:MPMoviePlayerWillExitFullscreenNotification object:nil];
...
-(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
if (self.landscapeOnlyOrientation) {
return UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight;
}
return UIInterfaceOrientationMaskAll;
}
- (void)moviePlayerWillEnterFullscreenNotification:(NSNotification*)notification {
self.landscapeOnlyOrientation = YES;
}
- (void)moviePlayerWillExitFullscreenNotification:(NSNotification*)notification {
self.landscapeOnlyOrientation = NO;
}
Cependant, un ennuyeux problème persiste, à savoir que si la vidéo sorties en plein écran en orientation portrait (après avoir joué forcé paysage), la vision sous-jacente de ne pas tourner en arrière. J'ai pour faire pivoter manuellement l'appareil en mode paysage et à l'arrière de portrait pour déclencher la mise à jour de l'orientation. Est-il une manière que je peux déclencher ce genre de mise à jour par programmation?
L'ensemble des captures d'écran doivent illustrer ce que je veux dire:
NB: Pour diverses raisons, à l'aide de MPMoviePlayerViewController n'est pas possible.
Des suggestions pour un travail autour?
Pas de. Vous pourriez essayer d'empêcher l'utilisation du mode plein écran. Ou tout simplement ne pas utiliser MPMoviePlayerController. Fondamentalement, c'est juste une grosse incohérence d'Apple et les développeurs ont besoin de garder sur eux jusqu'à ce qu'ils le réparer.
avez-vous vérifié ce encore de réponse. il est un exemple de projet attaché à ce que pourrait vous aider. stackoverflow.com/questions/15947349/...
OriginalL'auteur svth | 2014-02-20
Vous devez vous connecter pour publier un commentaire.
Salut à tous, j'ai eu même problème que j'ai résolu -
Voici mon code complet....
Vous devez d'abord en appdelegate:
Registre des Notifications pour le plein écran de contrôle:
Ensuite, ajoutez la ligne de code dans le lecteur de contrôleur:
Ce code est testé dans iOS6 et iOS7 fonctionne bien. Merci 🙂
S'il vous plaît laissez-moi savoir si il y a une question.....
Salut Vijay, merci pour le code. il fonctionne très bien après le retrait de la dispatch_async code dans le WillExitFullScreen méthode. Pouvez-vous me pourquoi vous mettez le code qui n'est pas utile et qu'est-ce que TypeVideo??
Grâce Satya pour le commentaire. J'ai utilisé dispatch_async pour accéder au thread principal parce que dans mon cas quand je suis entrer dans le mode paysage de mon précédent GUI devient déformée pendant l'animation. Dans mon cas, je suis de la lecture audio et vidéo sur le même joueur et à chaque fois qu'une vidéo de commencer à jouer il est plein écran pas dans l'audio de la chanson. J'ai donc utilisé TypeVideo pour la vidéo des chansons.
Désolé karthikeyan pour la réponse tardive. [[[NowPlaying sharedManager] playerViewController] allowRotation] Dans mon cas PlayerViewController obtenir du Paysage dans le cas où je suis entrer en mode plein écran en mode player. Ainsi, au moment de l' -> '- (void)moviePlayerWillEnterFullscreenNotification' notification de l'appel de méthode sur playerview contrôleur, je suis en train de dire que oui, permettre à tous de rotation maintenant par 'auto.allowRotation = OUI;' s'il vous Plaît laissez-moi savoir si vous n'êtes pas clair sur ce point. Merci.
OriginalL'auteur Vijay Sharma
Vous avez besoin de sous-classe et de fournir paysage pris en charge interface d'orientation.
OriginalL'auteur Srikanth
Vous pourriez essayer de "forcer" une orientation d'actualisation de laisser le système gérer la bonne orientation pour vous:
C'est hack-ish, mais il fonctionne.
OriginalL'auteur Rivera
Cela peut sembler fou, mais, pouvez-vous essayez d'enregistrer localement la dernière orientation avant l'ouverture de la vidéo-vue-contrôleur, puis en utilisant
application:supportedInterfaceOrientationsForWindow:
pour retourner l'a sauvé de l'orientation et de la force de la vue-contrôleur de rester sur elle et de ne pas tourner.OriginalL'auteur Juan de la Torre
Vous pouvez changer votre orientation par programme comme ceci
Et n'oubliez pas d'ajouter
#import <objc/message.h>
OriginalL'auteur Fran Martin
Je pense que vous pouvez enregistrer votre viewcontroller pour dispositif d'orientation et d'appel viewcontroller de l'orientation de la méthode de force.
OriginalL'auteur abhishekkharwar
Vous utilisez supportedIterfaceOrientationsForwindow recherchez: MPInlineVideoFullscreenViewController. Il est un peu difficile à trouver à droite-vue-contrôleur, mais il fonctionne.
Voici un exemple de code:
OriginalL'auteur Övünç Metin
vous devez ajouter ce code pour iOS7
il fonctionne parfaitement et simple
OriginalL'auteur AleyRobotics