2009-11-28 13 views
2

Je développe une application sur iPhone. Une vue soutient l'orientation en portrait et paysage. J'ai deux vues séparées pour les deux orientations. Cette vue a un UIToolbar en haut.UIToolBar et l'orientation de l'interface iPhone Problème

Problème lorsque je change de vue de paysage en portrait, UIToolbar en haut disparaît. Je souhaite que le toolbar revienne dans sa position d'origine lorsqu'il est ramené en mode portrait.

C'est ce que je fais dans mon programme:

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation) 
interfaceOrientation duration:(NSTimeInterval)duration {  
    if (interfaceOrientation == UIInterfaceOrientationPortrait) 
    { 
     self.view = self.portrait; 
     self.view.transform = CGAffineTransformIdentity; 
     self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(0)); 
     self.view.bounds = CGRectMake(0.0, 0.0, 300.0, 480.0); 
    } 
    else if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft) 
    { 
     self.view = self.landscape; 
     self.view.transform = CGAffineTransformIdentity; 
     self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(-90)); 
     self.view.bounds = CGRectMake(0.0, 0.0, 460.0, 320.0); 
    } 
    else if (interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) 
    { 
     self.view = self.portrait; 
     self.view.transform = CGAffineTransformIdentity; 
     self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(180)); 
     self.view.bounds = CGRectMake(0.0, 0.0, 300.0, 480.0); 
    } 
    else if (interfaceOrientation == UIInterfaceOrientationLandscapeRight) 
    { 
     self.view = self.landscape; 
     self.view.transform = CGAffineTransformIdentity; 
     self.view.transform = 
     CGAffineTransformMakeRotation(degreesToRadian(90)); 
     self.view.bounds = CGRectMake(0.0, 0.0, 460.0, 320.0); 
    } 
} 

Je ne sais pas ce que je manque ici? Toute aide sera grandement appréciée.

Répondre

1

si vous voulez juste faire votre point de vue rotatif, est est suffisant pour mettre en œuvre

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

dans votre classe viewCountroller

+0

Plus vous aurez envie de définir les paramètres d'ancrage/extensibles sur l'onglet de mise en page dans Interface Builder. –

+0

J'ai deux vues que je veux échanger en mode portrait et paysage. La vue Portrait a une barre d'outils en haut qui semble bien au premier lancement. Mais quand je change l'orientation et la replace dans la barre d'outils portrait disparaît. – Leo

1
self.view.bounds = CGRectMake(0.0, 0.0, 300.0, 480.0); 

Le problème ici est que vous faites la mais il devrait être 460. Donc vous avez actuellement 20px de plus sur la hauteur, ce qui peut envoyer le toopbar quelque peu hors de l'écran.

+0

20px ne provoquera pas la disparition de la totalité de la barre d'outils. et la taille de l'écran de l'iPhone est 320x480. – Morion

+0

oui. je suis d'accord. C'est pourquoi j'ai dit "ce qui peut envoyer le toopbar quelque peu hors de l'écran." . :) –

+0

Salut les gars. Merci pour les réponses. J'ai essayé de régler moins de hauteur mais la barre d'outils reste invisible. Une idée? – Leo

2

Dans le constructeur d'interface, sélectionnez la barre d'outils, appuyez sur commande-3; cela fait apparaître le menu de contrôle de la règle/alignement.

Sous la section Autsizing, la barre d'outils est par défaut couplée uniquement à gauche-droite et au centre. Pas au TOP. Sélectionnez le "I" en haut. maintenant la barre d'outils est ancrée par rapport au haut de la vue et ne sera pas repoussée pendant la rotation.

Je suis sûr qu'il est un équivalent de code pour cela aussi bien

+0

Il est également possible qu'une autre vue ne soit pas ancrée correctement (en mode Autosizing) et se dessine elle-même en haut de la barre d'outils. – jlstrecker