Comment mettre en œuvre UIViewController rotation en réponse à des changements d'orientation?
Mon application a environ 10 différents UIViewControllers, juste un de qui je veux passer en mode paysage si l'appareil est en rotation. (Tout le reste, je veux garder dans le portrait.)
Afin de mettre en rotation sur un point de vue, j'avais besoin de mettre en œuvre son contrôleur " shouldAutorotate de la méthode et de retour OUI. Depuis ce point de vue est accessible via une manette de navigation, j'ai aussi besoin de créer une sous-classe de UINavigationController qui implémente 'shouldAutorotate' et retour OUI.
Cette solution fonctionne, mais trop bien. Je trouve que tous les UIViewControllers je pousse sur mes sous-classe de UINavigationController répondre à la rotation, même si j'en œuvre 'shouldAutorotate' et retour PAS. (Rappelez-vous: je veux seulement un particulier UIViewController pour répondre à la rotation, ce n'est pas dans la navigation du contrôleur de la pile.)
Donc, ma question est: comment puis-je mieux le faire? Toutes les solutions que je peux venir avec semblent 1) lourd, et 2) la pire, ne semble pas fonctionner.
Merci beaucoup.
OriginalL'auteur Greg Maletic | 2010-05-14
Vous devez vous connecter pour publier un commentaire.
lorsque vous implémentez UINavigationController, cette classe est le parent qui contrôle tous les enfants viewControllers qui sera poussé dans la pile. Par conséquent, la RootViewController est le seul contrôleur de dire Oui ou Non à un atterrissage en autorotation. Même si vous êtes de passage Oui à l'auto-rotation en vue d'enfants contrôleurs, ils ne comptent pas!
C'est la nature de UINavigationController. Donc, pour changer, vous avez deux choix:
1 - manipuler Manuellement, ce qui vous oblige à passer par une certaine lourdeur des codes.
2 - Modifier votre conception de sorte qu'il est plus compatible à UINavigationController. Que la seule vue qui doit tourner, doit être appelée par le RootViewController (pas la Navigation en Vue de la Racine Contrôleur -- ils sont nommés de la même façon, mais sont totalement différentes), la vue qui héberge NavController. Et, lorsque l'appareil tourne, il va pousser le NavController à la vue ou à l'autre.
3 - L'autre méthode, qui fonctionne également, mais n'est pas recommandée, car elle viole le concept de la MVC, c'est que votre NavController pouvez écouter les Notifications. Cet enfant de la vue que l'on PEUT et DOIT tourner pouvez lancer une notification (par exemple, rotateMe, et une fois que le NavController l'entend, il tourne.
Comme je l'ai dit, cela va fonctionner, mais il viole le modèle MVC -- ce qui est bien pour Apple, mais à partir de la programmation n'est pas recommandé.
Si vous avez besoin de plus amples explications à propos de l'un d'eux, s'il vous plaît laissez-moi savoir.
OriginalL'auteur Canopus
- Je le faire en ayant une racine-vue-contrôleur (ce pourrait être un UITabBarController) et dans la méthode viewDidLoad-je m'abonner à la rotation des événements:
Puis dans le didRotate: méthode je regarde la vue contrôleur est visible lorsque la rotation s'est passé, et quelle orientation le téléphone est en:
À l'intérieur de cette didRotate: vous pouvez regarder ce qui est visible viewController et faire ce que vous voulez à partir de là.
Je vous présente un modal-vue-contrôleur en mode paysage lors d'un point de vue particulier contrôleur est visible et que le téléphone est mis en rotation dans le paysage. Si tout autre point de vue, contrôleur est visible, je ignorer l'événement.
Je force mon modal-vue-contrôleur pour afficher en mode paysage dans son viewWillAppear méthode - que je peux donner à quelqu'un ce code s'ils le veulent.
Espère que cette aide.
Dave
OriginalL'auteur bandejapaisa
Retourne OUI sur la manette de navigation sous-classe seulement si [[navController topViewController] isKindOfClass:[RotatingViewController classe]]
OriginalL'auteur OrR
J'ai vu des exemples à l'aide de la façon dont vous le faites, mais ne pouvait pas le faire fonctionner correctement. J'ai trouvé la meilleure façon de le faire à partir de Pommes exemples. Fondamentalement, vous de mettre en œuvre un presentModalViewController et de créer un autre point de vue. UIKit ne une base de rotation de l'animation et des fondus enchaînés entre la vue. Vous avez à mettre en œuvre pour la rotation de la vue en tant que délégué de classe de sorte qu'il peut appeler à sa classe d'appel de rejeter et de mise à jour de l'orientation.
Et puis pour afficher un écran paysage:
OriginalL'auteur Rudiger