iOS 6 et orientation des pages...

Bonjour,


 


Je deviens fou avec les orientations des pages... Jusqu'à  maintenant je ne faisais que iOS5 et je m'en tirais, mais là  je tourne en rond, et je suppose qu'un truc m'échappe...


 


Je suis donc sur une app iOS 6 (sans ARC). Toute l'appli doit être en mode portrait sauf l'affichage des photos et des vidéos qui doit permettre le plein écran sous toutes les coutures... Dans mon PLIST je n'ai que le mode portrait.


 


Mon AppDelegate tourne autour d'un TabBarController :


 


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions


{


    self.window = [[[UIWindow alloc] initWithFrame:</span><span style="color:#c05710;">UIScreen</span><span style="color:#000000;"> </span>mainScreen<span style="color:#000000;">] </span>bounds<span style="color:#000000;"> autorelease];


    


   ....


UIViewController *videoController = [[[VideosViewController alloc] initWithNibName:@VideosViewController bundle:nil] autorelease];


UINavigationController *videoNavigation = [[[UINavigationController alloc] initWithRootViewController:videoController] autorelease];


 


UIViewController *photoController = [[[PhotosViewController alloc] initWithNibName:@PhotosViewController bundle:nil] autorelease];


UINavigationController *photoNavigation = [[[UINavigationController alloc] initWithRootViewController:photoController] autorelease];


 


....


        


self.tabBarController = [[[UITabBarController alloc] init] autorelease];


 


self.tabBarController.viewControllers = @[videoNavigation, photoNavigation, socialNavigation, navController];


 


self.window.rootViewController = self.tabBarController;


 


[self.window makeKeyAndVisible];


    return YES;


}


 


J'ai donc attaché un navigationController à  chacun de mes ViewController qui composent mon tabBarController.


 


Mon contrôleur de vue des vidéos affiche une liste de vidéos dans une tableView, puis sur sélection ouvre une ViewController avec les explications (titre, durée etc).


 


Sur le clic d'un bouton je lance la vidéo (extrait de detailsVideosViewController.m):


 


 


NSArray *info = [[[monapp.videosList objectAtIndex:ip.sectionvalueForKey:@videos] objectAtIndex:ip.row];


NSURL *url = [NSURL URLWithString:[info valueForKey:@video]];


self.mPlayer = [[[MPMoviePlayerViewController alloc] initWithContentURL:url] autorelease];


 


    if(self.mPlayer)


    {


        self.mPlayer.moviePlayer.fullscreen = YES;


        self.mPlayer.moviePlayer.shouldAutoplay = YES;


        self.mPlayer.moviePlayer.scalingMode = MPMovieScalingModeAspectFit;


        self.mPlayer.wantsFullScreenLayout = YES;


        self.mPlayer.moviePlayer.controlStyle = MPMovieControlStyleFullscreen;

        [self presentMoviePlayerViewControllerAnimated:self.mPlayer];


        [self.mPlayer.moviePlayer play];


    }


 


La vidéo s'affiche bien en mode portrait, mais si je tourne le device, elle reste dans le sens portrait, malgré :


 


 


-(BOOL)shouldAutorotate {


    return YES;


}


- (NSUInteger)supportedInterfaceOrientations {


    return UIInterfaceOrientationLandscapeRight;
}


- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {


   return UIInterfaceOrientationLandscapeRight;


}


 


 


Comment faire pour pour qu'elle se mette en plein écran dans le sens paysage ?


 


Merci pour votre aide


 


 


 


 


 


 


Réponses



  •  


    Dans mon PLIST je n'ai que le mode portrait.


     




     


    Inutile de chercher plus loin.

  • Mais si je rajoute dans mon PLIST les modes paysages, toutes les pages deviennent orientables en paysage, même si j'écris :


     


     


    -(BOOL)shouldAutorotate {


        return NO;


    }


    - (NSUInteger)supportedInterfaceOrientations {


        return UIInterfaceOrientationPortrait;


    }


    - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {


    return UIInterfaceOrientationPortrait;


    }

  • Mais si je rajoute dans mon PLIST les modes paysages, toutes les pages deviennent orientables en paysage, même si j'écris :


     


     


    -(BOOL)shouldAutorotate {


        return NO;


    }


    - (NSUInteger)supportedInterfaceOrientations {


        return UIInterfaceOrientationPortrait;


    }


    - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {


    return UIInterfaceOrientationPortrait;


    }

  • Il faut mettre les méthodes supportedInterfaceOrientations dans les contrôleurs racines.


     


    D'autre part la méthode supportedInterfaceOrientations n'est pas appelée si shouldAutorotate retourne NO.


  • AliGatorAliGator Membre, Modérateur

    Regarde la vidéo des CocoaHeads Rennes #11 qui traite du sujet des orientations, tout est expliqué.


  • Lorsque je fais retourner YES à   shouldAutorotate j'ai une erreur :


     


     


    'UIApplicationInvalidInterfaceOrientation', reason: 'Supported orientations has no common orientation with the application, and shouldAutorotate is returning YES'


     


    Pourtant dans le PLIST j'ai rajouté toutes les autres orientations...


     


    Je vais voir pour supportedInterfaceOrientations


     


    Merci


  • Am_MeAm_Me Membre

    Et dans projet > target > Summary a tu active les bonne orientations ????


  • 1 - Ok j'ai sous classé mon tabBarController : pas mieux


    2 - J'ai regardé la vidéo d'AliGator (merci)


    3 - Alors j'ai aussi sous classé tous mes navigationController : ca marche !


     


    Du coup j'ai mes vues en mode portrait et mes vidéos en paysage ou portrait en fonction de l'orientation du simulateur.


    Par contre en sortant du mode vidéo fullscreen j'obtiens une erreur :


     


     


    'UIApplicationInvalidInterfaceOrientation', reason: 'preferredInterfaceOrientationForPresentation must return a supported interface orientation!'

  • Pour en finir avec le sujet, ma dernière erreur était due à  UIInterfaceOrientationPortrait  au lieu de UIInterfaceOrientationMaskPortrait dans :


     


     


    - (NSUInteger)supportedInterfaceOrientations


    {


        return UIInterfaceOrientationMaskPortrait;


    }


     


    Merci à  tous


Connectez-vous ou Inscrivez-vous pour répondre.