10
votes

Autoriser UiTrinterfaceOrientationLyScape pendant la lecture vidéo UiWebView

Mon iPhone App est une application d'orientation portrait et dans mon application, j'ai un utableview qui a un uiwebview dans le premier uitablecell . Le uiWebView montre une vidéo YouTube intégrée. Lorsque je clique sur la vidéo pour jouer, il entre en mode plein écran. Ce que je dois faire est, permet à l'utilisateur de faire pivoter son appareil et de lire la vidéo en mode paysage. Ensuite, lorsque la vidéo est arrêtée, autorisez uniquement la portrait. Je me donne pour écouter la notification lorsque la vidéo entre dans le plein écran et laisse plein écran. Mais je ne sais pas comment permettre à l'utilisateur de faire pivoter l'utilisateur de faire pivoter l'orientation de l'interface.

Donc, de sorte que j'ai 2 méthodes appelées lorsque la notification est passée xxx

Que serait Je mets dans ces 2 méthodes pour permettre une modification d'orientation uniquement pendant la lecture vidéo?


2 commentaires

Soyez prudent, car iOS6 la notification du "bouton vidéo" semble être: UimoviePlayControllerWillexitfullfreennotification (voir: Stackoverflow .COM / A / 8554040/1436861 et Stackoverflow.com/a/12681507/1436861 )


Dupliqué possible de UimoviePlayerControllerdIdentificationCreannotification non fonctionner dans iOS8


3 Réponses :


0
votes

Vous auriez une variable d'état global, probablement dans votre déléguée de votre application ou où vous stockez vos variables qui devraient être accessibles à l'échelle mondiale, puis définissez-la sur true ou false Selon Wether, le joueur de film est en plein écran ou non. Dans les rappels qui sont appelés à faire pivoter l'application, vous vérifiez l'état de la variable et en fonction de ce retour si la rotation est autorisée ou non.


1 commentaires

J'aurais probablement dû mentionner que j'ai également eu un ensemble de Bool pour cette raison exacte, mais j'ai échoué à essayer de changer si la rotation est autorisée ou non dans les rappels pour faire pivoter l'application. Seriez-vous capable de me montrer du code qui permettrait cela?



19
votes

Je l'ai compris. Dans mes 2 méthodes:

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{
NSUInteger orientations = UIInterfaceOrientationMaskPortrait;
if (self.fullScreenVideoIsPlaying == YES) {
    return UIInterfaceOrientationMaskAllButUpsideDown;
}
else {
    if(self.window.rootViewController){
        UIViewController *presentedViewController = [[(UINavigationController  *)self.window.rootViewController viewControllers] lastObject];
        orientations = [presentedViewController supportedInterfaceOrientations];

    }
    return orientations;
}
}


7 commentaires

Merci!! J'ai passé plusieurs heures à rechercher une réponse à ce problème et votre solution était de loin la plus simple. Très appréciée :)


Je cherche des heures sur la façon de résoudre mon problème de rotation. Cela fixe-le; Cependant, je ne peux pas sembler l'obtenir pour désactiver la rotation après la fin de la vidéo. Où avez-vous mis l'appel de notification pour YouTubefiné?


Nevermind, je l'ai réparé. Je réalise que toute mon application faisait tourner. Pour résoudre ce problème, je viens de supprimer l'instruction IF (Self.Window.rootViewController) dans la méthode prise en chargeInterfaceOrientsforWindowWindow. Maintenant tout fonctionne parfaitement. Merci d'avoir posté ça!


Bonjour @Browneface Après avoir retiré aussi, je suis incapable d'arrêter les orientations de ma candidature. Et aussi après avoir terminé l'application Vedio toujours en mode paysage uniquement. Cela ne changera pas avec force. S'il vous plaît aidez-moi ce que je fais mal


Comment puis-je tirer les 2 méthodes? Ajoutez une cible au webview lorsque sa touche est touchée?


Le 'NSnotificationCenter' appelle les deux méthodes. Vous pouvez voir où je l'ai défini dans la question initiale. [[NOTIFICATIONCENTER DEFAULTERCENTER] Addobserver: Sélecteur auto-sélecteur: @Selector (YouTubefiné :) Nom: @ "UimoviePlayControllerDidéyxitfulcreennification" Objet: nil]; Et ceci [[NOTIFICATIONCENTER DÉLÉLACETERCENTER] Addobserver: Sélecteur auto-sélecteur: @Selector (YouTubestarted :) Nom: @ "UimoviePlayControllerdIdentificationLsCreennotification" Objet: nil];


Crash! Initialement, lorsque vous lisez la ligne: UIViewController * présentéviewcontroller = [[(UINAVIGATIONCONTROLLER *) Self.Window.rootViewController ViewControls] LastObject] ;. Je pense que je suis défini MfsiidemenucontAnterviewController comme ContexView de RootView pour fenêtre.



2
votes

Si vous souhaitez seulement prendre en charge la lecture du paysage en plein écran. De iOS 8 à partir de l'iOS, vidéo de uiwebview joue à l'intérieur AvplayerviewController .

Dans votre vérification de votre AppDelegate Si la fenêtre de présentation contient AvplayerviewController . xxx


0 commentaires