Question

Je développe une application iPhone qui a plusieurs grué, et devrait être le paysage que.

L'application est configuré pour démarrer en mode paysage via son fichier Info.plist.

J'ai deux contrôleurs de vue: FirstViewController et SecondViewController.

Pour chacun d'eux, j'ai un fichier nib, où la vue est dans le paysage. Les deux contrôleurs de vue sont ajoutés à ma plume MainView comme points de vente, et leurs points de vue sont paresseusement initialisés.

Lorsque les charges d'application, la première vue apparaît dans le paysage, comme prévu. Cependant, quand je passe à la deuxième vue, le dispositif (ou simulateur) reste dans le paysage, mais la vue est mis en rotation, comme si le dispositif était en mode portrait, freinage mon interface.

Dans les deux classes UIViewController j'ai le code suivant:

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

et pour changer de vue, dans mon délégué app que je fais:

[viewController.view removeFromSuperview];
[window addSubview:secondViewController.view];

viewController et secondViewController sont les deux points de vente où les contrôleurs de vue sont connectés.

est ainsi la deuxième vue regarde dans IB: texte alt http://img27.imageshack.us/img27/4898/picture1ni.png

et voilà comment il regarde dans le simulateur: texte alt http://img402.imageshack.us/img402/4866/picture2wt.png

Pourquoi est-ce que la deuxième vue affiche dans le paysage, mais avec l'interface tournée?

Je ne voudrais pas faire face à des propriétés de transformation, puisque cela semble exagéré.

Était-ce utile?

La solution

Je cette question en espérant tenu le premier rôle que quelqu'un vous donner une réponse perspicace et je voudrais apprendre quelque chose .. malheureusement, je crains que vous pourriez avoir besoin d'utiliser des transformations pour obtenir que cela fonctionne correctement. Voici le code que je l'ai utilisé ces derniers temps pour résoudre le problème:

- (void)forceLandscapeForView:(UIView *)theView {
  theView.transform = CGAffineTransformMakeRotation(degreesToRadian(90));
  theView.bounds = CGRectMake(0, 0, 480, 320);
  theView.center = CGPointMake(160, 240);
  [theView setNeedsLayout];
  [theView setNeedsDisplay];
}

Ensuite, lorsque vous ajoutez votre nouvelle vue, vérifiez l'orientation actuelle et si la force nécessaire la rotation:

if (!UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation)) {
  [self forceLandscapeForView:_activeViewController.view];
}

Alors bien sûr, vous aurez envie de répondre adéquatement à shouldAutorotateToInterfaceOrientation dans chacun de vos contrôleurs de vue:

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

J'aimerais entendre parler de solutions de rechange si ce n'est pas tout le nécessaire. Il y a aussi une mise en garde, je l'ai remarqué avec cette configuration: si vous avez une transition entre les vues, et vous faites pivoter le téléphone au cours de cette transition, il est possible pour les orientations de vues à se fâcher ou « coincé » sur la mauvaise orientation du paysage, par exemple que vous devez tourner le téléphone sur (paysage droite vs gauche paysage) que vous naviguez entre les vues.

Autres conseils

il est juste une suggestion, mais vous pouvez essayer de revenir NO dans la méthode shouldAotorotate pour la deuxième vue. Ou essayer de le faire dans le mode portrait dans l'IB. Il semble que votre point de vue a été correctement chargé (en mode paysage) mais a reçu un message shouldAutorotate et avait subi une rotation de 90 degrés.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top