2010-11-30 21 views
0

J'ai cette application iPad avec différents NIB et vues. Chaque vue possède deux NIB, une pour l'orientation du potrait et une pour le paysage, donc je recherche une méthode pour basculer par programme NIB pour un UIViewController donné.Meilleure façon de modifier le NIB de la vue UIViewController par programmation

En ce moment, j'ai cette fonction que j'utilise dans la méthode willRotateToInterfaceOrientation de chaque contrôleur:

void UIHandleRotation(UIViewController *controller, NSString *nibName, UIInterfaceOrientation orientation, BOOL transform){ 
    double angle = 0.0; 

    if(orientation == UIInterfaceOrientationPortrait) { 
     angle = PI * 2 /* 360° */; 
    } 
    else if(orientation == UIInterfaceOrientationLandscapeLeft){ 
     angle = PI + PI/2 /* 270 ° */; 
     // Each landscape nib is [nib-name]L 
     nibName = [NSString stringWithFormat:@"%@L", nibName]; 
    }  

    [[NSBundle mainBundle] loadNibNamed:nibName owner:controller options:nil]; 
    if(transform) { 
     controller.view.transform = CGAffineTransformMakeRotation(angle); 
    } 
} 

Mais il me donne un comportement étrange (contrôle ui position foiré, les sorties ne sont pas associés comme dans l'interface constructeur, et ainsi de suite).

Est-ce que je fais quelque chose de mal ou est-ce qu'il y a juste une meilleure façon de l'implémenter? Merci

NOTE: Je ne suis pas en utilisant un contrôleur de navigation, donc je ne peux pas utiliser cette solution Easiest way to support multiple orientations? How do I load a custom NIB when the application is in Landscape?

Répondre

1

Vous ne devez pas changer de pointe, vous devez changer de contrôleur.

Voir cette réponse pour: Easiest Way to Support Multiple Orientations

+0

Voir la note que je viens d'ajouter. –

+0

Vous pouvez utiliser un contrôleur de navigation et c'est la manière la plus simple de le faire. Vous n'avez pas à exposer le contrôleur de navigation dans l'interface. L'exemple auquel je suis lié ne le fait pas. L'utilisateur ne peut pas dire qu'un contrôleur de navigation est en cours d'utilisation. – TechZen

0

vous devez avoir une vue par nib, de sorte que votre UIViewController aura deux UIViews. un pour le portrait, et un pour le paysage.

0

Pourquoi avez-vous besoin d'utiliser 2 pour la même grué view.You devrait utiliser une plume pour différentes orientations.You peut gérer les contrôles nécessaires dans programatically la même méthode

willRotateToInterfaceOrientation

Merci.

3

Vous devez utiliser un seul NIB avec deux vues, une pour le portrait (potraitView) avec le cadre (0,0768, 1024) et une autre pour le paysage (landScapeView) avec le cadre (0,0,1024, 768). Et définissez vos contrôles dans les deux vues (potraitView et landScapeView) selon vos besoins.

et après cela, vous pouvez définir vos vues selon l'orientation de l'appareil AS-

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 

if(interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) 
{ 
landScapeView.hidden = YES; 
portraitView.hidden = NO; 

} 

else{ 

landScapeView.hidden = NO; 
portraitView.hidden = YES; 

} 
    return (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationLandscapeLeft || 
      interfaceOrientation == UIInterfaceOrientationLandscapeRight || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown); 
} 

Salut,

Comme je pense que vous voulez savoir, lorsque les charges, quelle est l'orientation par défaut, et Comment je peux charger la vue selon cette orientation. Si cette question est la même que vous demandez, alors les answes iS

Lorsque vous exécutez votre application et les mêmes charges de vue de classe, puis - (BOOL) shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation) méthode interfaceOrientation est appelée automatiquement. Ensuite, il retourne l'orientation de votre appareil, et définit votre vue en fonction de cette orientation (en utilisant le même code que décrit ci-dessus). Je pense que vous n'avez pas besoin de faire plus.

+0

Comment puis-je gérer exactement la prise de vue par défaut alors? Pourriez-vous s'il vous plaît modifier votre message et m'expliquer l'ensemble des vues création/liaison à IB? –