2010-11-18 31 views
1

Je construis une application avec plusieurs UIViewControllers contrôlés par un RootViewController. Actuellement dans le plist l'application par défaut à LandscapeRight.iPhone: application avec seulement des vues de paysage et de portrait seulement

Disons que je les fichiers suivants qui peuvent être chargés dans le RootViewController:

  1. IntroView (Paysage droit SEULEMENT)
  2. LandscapeView (Paysage droit SEULEMENT)
  3. PortraitView (Portrait SEULEMENT)

J'ai également ajouté dans le shouldAutorotateToInterfaceOrientation du RootViewController ce qui suit:

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
if ([currentClass class] == PortraitView.class) { 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 

} else { 
    return (interfaceOrientation == UIInterfaceOrientationLandscapeRight); 
} 

}

si tout va bien jusqu'à ce que je charge dans le PortraitView et dans le viewWillAppear i ajouter les éléments suivants (similaire à this thread

if (self.interfaceOrientation == UIInterfaceOrientationPortrait) { //UIInterfaceOrientationLandscapeRight) {  

    self.view.transform = CGAffineTransformIdentity; 
    self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(-90)); 
    self.view.bounds = CGRectMake(0.0, 0.0, 320, 480); 
    self.view.center = CGPointMake(240.0f, 160.0f); 

} 


[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationPortrait]; 

On obtient ainsi un bien chargé dans PortraitView mais maintenant mon problème est-ce que dans mon PortraitView j'ai 2 sous-vues que je voudrais basculer entre, mais parce que j'ai tourné ma vue UIViewAnimationTransitionFlipFromLeft fait en fait flip haut en bas au lieu de gauche à droite. Je ne peux pas pour la vie de moi comprendre comment dire à PortraitView que c'est dans Portrait.

Lorsque je vérifie l'orientation [[UIDevice currentDevice]]; il me dit que c'est dans Landscape. Lorsque j'essaie d'utiliser shouldAutorotateToInterfaceOrientation et que je le mets uniquement en mode portrait, il fait alors pivoter ma vue afin qu'elle ne soit plus correcte.

J'espère que cela a du sens! Été en regardant cette question toute la journée.

Merci!

+0

Quelle est la super-classe de RootViewController? Est-ce juste un simple UIViewController? –

+0

Oui juste un UIViewController. Je n'utilise pas de barres de navigation ou d'onglets. –

Répondre

0

Je suis tombé sur cela légèrement différemment; une sous-classe UIViewController en mode paysage qui a permuté de haut en bas plutôt que de gauche à droite.

Le correctif qui a fonctionné pour moi était d'ajouter toutes mes vues à une seule vue "interne", puis retourner à la place de viewUIViewController normale.

[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight 
          forView:[self innerView] 
          cache:YES]; 

[self innerView] est l'enfant unique de [self view], et tous les sous-vues sont à l'intérieur de celui-ci.