2010-09-22 6 views
2

Toutes mes largeurs, hauteurs, positions et tout sont réglés par rapport aux vues et ainsi, donc si l'iPhone est tourné, il devrait "s'étendre pour s'adapter" comme il l'était. :)rotation de périphérique iphone

Comment devrais-je dire à l'iphone d'être en "mode paysage" c'est à dire: rafraîchir, mais maintenant toutes les largeurs sont des hauteurs et toutes les hauteurs sont des largeurs?

Merci Tom

EDIT Voici le code que j'ai actuellement ... il ne fonctionne toujours pas - je ne peux pas sembler comprendre comment faire fonctionner

En mon contrôleur de vue (et non le contrôleur de vue racine) J'ai cette méthode:

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

(j'ai aussi essayé de mettre cette méthode dans ma racine contrôleur de vue, mais cela ne fonctionne pas non plus)

Ensuite, dans ma méthode viewDidLoad j'ai ceci:

[self.view setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight]; 
[self.view setAutoresizesSubviews:YES]; 

Cela ne fonctionne pas. . :(du moins pas dans le simulateur

Répondre

2

Définissez le AutoresizingMask de votre vue en fonction de vos attentes.

ou d'implémenter la méthode layoutSubViews. N'oubliez pas d'implémenter la méthode shouldAutorotateToInterfaceOrientation des viewControllers. Le flux est le suivant.

  • Dispositif tourner
  • racine ViewController reçoivent l'événement shouldAutoRotateToInterfaceOrientation
  • Si le viewController répond OUI, l'événement willRotateToInterfaceOrientation est envoyé aux contrôleurs
  • le contrôleur redimensionne son point de vue selon son autoresizingMask
  • si la propriété autoresizesSubviews de la vue est true, le processus descend vers les sous-vues
  • didRotateToInterfaceOrientation l'événement est envoyé au contrôleur.

Voici un exemple de code viewController

- (void)loadView { 
    UIView* theView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; 
    theView.backgroundColor = [UIColor blueColor]; 

    UIView* redRectangle = [[UIView alloc] initWithFrame:CGRectMake(10.0f, 10.0f, 100.0f, 100.0f)]; 
    redRectangle.tag = 1; 
    redRectangle.backgroundColor = [UIColor redColor]; 
    [theView addSubview:redRectangle]; 
    [redRectangle release]; 

    UIView* greenRectangle = [[UIView alloc] initWithFrame:CGRectMake(10.0f, 120.0f, 100.0f, 100.0f)]; 
    greenRectangle.tag = 2; 
    greenRectangle.autoresizingMask = UIViewAutoresizingFlexibleWidth; 
    greenRectangle.backgroundColor = [UIColor greenColor]; 
    [theView addSubview:greenRectangle]; 
    [greenRectangle release]; 

    UIView* yellowRectangle = [[UIView alloc] initWithFrame:CGRectMake(theView.bounds.size.width-110.0f, theView.bounds.size.height-110.0f, 100.0f, 100.0f)]; 
    yellowRectangle.tag = 3; 
    yellowRectangle.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin; 
    yellowRectangle.backgroundColor = [UIColor yellowColor]; 
    [theView addSubview:yellowRectangle]; 
    [yellowRectangle release]; 

    self.view = theView; 
    [theView release]; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    return YES; 
} 
+0

comment puis-je faire pivoter tout le contenu? –

+0

Vous n'avez pas :-) Depuis la barre d'état sera toujours en place, le contenu est redimensionné et ne fait pas vraiment "tourner". – VdesmedT

+0

salut ... merci pour votre aide - je n'arrive toujours pas à le faire fonctionner. :(Je ne suis pas sûr de vous comprendre correctement - J'ai édité mon OP pour inclure ce que j'ai fait compte tenu de ma compréhension de votre réponse.Je suis désolé si c'est fastidieux –

0

Vous pouvez ajuster la taille de votre point de vue automatiquement en réglant:

[ tmpView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight ];

Ainsi, lorsque vous faites pivoter se redimensionne

Mais je pense qu'il a gagné. « t faire ce que vous avez besoin donc vous devriez peut-être ajouter une fonction (dans le contrôleur) qui est appelée lorsque rotate de l'appareil.

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 

    [ self refreshLayouts ]; 

}

Puis, en refreshLayou tu te changes la largeur/hauteur comme tu veux.

Bonne chance!

+0

hey. merci pour votre aide - avez édité mon op parce que je n'arrive toujours pas à le faire fonctionner. :(des idées quoi faire maintenant? –

0

Vérifiez d'abord si votre point de vue de l'appel du contrôleur retour méthodes pour les événements de rotation sont appelés ou non:

-willRotateToInterfaceOrientation:duration: 
-didRotateFromInterfaceOrientation: 

Si ceux-ci ne sont pas appelés, alors il ne sert à rien d'aller plus loin car votre viewController ne tourne pas du tout!

Cela m'intéresse - "Dans mon contrôleur de vue (pas le contrôleur de vue racine)". Comment ajoutez-vous votre contrôleur de vue à la hiérarchie de fenêtre? Le présentez-vous, ou simplement ajoutez-vous sa vue en tant que sous-vue à, disons un contrôleur de vue racine?

+1

'[self.navigationController pushViewController: thePageIWantToAutoRotate animé: YES];' essayera ces méthodes, merci. –

+0

Si vous le faites de cette façon, alors le contenu DEVRAIT tourner, peut-être qu'ils apparaissent comme écrêtés, mais le contrôleur de vue devrait tourner. –

Questions connexes