2012-07-12 4 views
0

J'ai ce code dans une UIViewController sous-classe:Vue ne tourne pas correctement

- (id)init { 
    self = [super init]; 

    if (self) {    
     self.view.frame = [PDToolbox screenFrame]; 
     self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 

     self.view.backgroundColor = [UIColor redColor]; 
    } 

    return self; 
} 

La seule chose que j'ai en termes de toutes les méthodes de rotation est la suivante:

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { 
    return YES; 
} 

Cependant, après l'écran est tourné à paysage, faire un NSLog sur la vue montre cela:

<UIView: 0x10061640; frame = (0 0; 320 480); transform = [0, -1, 1, 0, 0, 0]; autoresize = W+H; layer = <CALayer: 0x10061670>> 

Je ne comprends pas pourquoi c'est en train de faire cette transformation, et pas seulement de tourner comme d'habitude? Cela signifie que toutes les vues que je place sur le dessus après la rotation et définie pour être la taille de la vue finissent à une position 320x480.

EDIT:

Les personnes ne comprennent pas. Donc, je mets une vue sur le dessus de celui-ci, la même taille que le UIView, en utilisant:

UIView *anotherView = [UIView alloc] initWithFrame:controller.view.bounds]; 
[controller.view addSubview:anotherView]; 

Si j'ajoute anotherView dans en mode portrait, anotherView apparaît en mode portrait, avec le cadre 320x480. Si j'ajoute une autre vue dans le paysage, une autre vue apparaît dans le paysage, mais toujours avec le cadre 320x480, parce que c'est ce que le cadre de controller.view est encore, pour une raison inconnue. À quoi ressemble votre hiérarchie de vues/contrôleurs?

+0

Pourriez-vous simplement poster un code complet de votre UIViewCOntroller –

+0

@ R.A Sure. Je viens de le faire. – Andrew

+0

En fait, je ne comprends pas votre problème..Qu'est-ce que vous entendez par là? "Vues je place sur le dessus après la rotation et définie pour être la taille de la vue finissent à une position 320x480" –

Répondre

0

Il me semble que quelque chose est en train de définir une transformation de rotation de 90 ° sur votre vue, plutôt que de changer le cadre de la vue. Si vous ne le faites pas vous-même, il s'agit probablement d'une vue parent ou d'un contrôleur de vue.

+0

C'est une sous-classe directe de UIViewController. – Andrew

+0

Je ne parle pas de la hiérarchie des classes de votre classe UIViewController, je veux dire de la hiérarchie de vue de votre application. La vue du contrôleur est-elle intégrée dans une autre vue ou est-elle placée directement dans l'UIWindow de l'application? – Tony

+0

C'est la vue normale qui vient avec un UIViewController. Cela n'a pas été modifié. – Andrew

0

Le cadre et les limites sont des choses très différentes. Vous devriez lire le guide d'Apple au View Geometry - il contient beaucoup d'informations qui ont été inestimables pour moi.

Vos limites seront toujours de 320x480 parce que quelqu'un définit votre transform (ce qui affecte le frame, mais pas le bounds).

Assurez-vous que la vue d'ensemble de la vue de votre contrôleur de vues a autoresizesSubviews définie sur YES et que toutes les vues secondaires ajoutées ont les autoresizingMask s appropriées.