2011-04-06 4 views
2

Ceci est le plus déf quelque chose de très simple, mais il me rend fou, ne peux pas le comprendre.UIScrollView ne tourne pas au paysage

Il était très simple, voir ci-dessous la solution

Mon application ne fonctionne pas rotation automatique. Il est juste coincé en portrait.

Mon AppDelegate crée un viewController dont shouldAutorotate n'est pas commenté et renvoie simplement yes.

Mon viewController configure une vue de défilement (x) comme vue et ajoute une vue de défilement personnalisée sous-classée (y) comme sous-vue. Than scrollview (y) ajoute UIView comme sous-vue. Cet UIView agit comme une vue de contenu et a 1 ou plusieurs autres UIViews comme sous-vue.

Alors: AppDelegate -> ScrollView (x) -> ScrollView (y) -> UIView -> 1 ou plus

J'ai de UIView une ligne affichée lorsque shouldAutorotate est appelée. Cela arrive 2x lorsque l'application a fini de charger. Quand je fais tourner le simulateur, rien ne se passe, shouldAutorotate n'est pas appelé apparemment parce que je ne vois pas une ligne affichée dans mon journal.

Y a-t-il une propriété sur l'UIScrollview qui l'empêche de tourner?

Mise à jour: Je viens de changer mon plist.info pour démarrer l'application en mode paysage. Maintenant, l'application est coincée dans le paysage et ne tourne pas au portrait.

FYI: Je n'utilise pas de constructeur d'interface, tout est fait en code.

+0

Scrollviews peut tourner normalement. Je viens de créer une application basée sur une vue simple et ajouté un scrollview à la vue du xib. Juste ajouté shouldAutoRotate ... au viewController. –

+0

Merci Nick, j'ai aussi testé ça. Fondamentalement, mon application suit l'exemple PhotoScroller d'Apple. Cet exemple pivote également une fois que vous avez ajouté la méthode shouldAutorotate. – DIJ

+0

Mais votre application ne fonctionne pas? Utilisez-vous un logiciel de versionnage comme git? Revenir en arrière quelques étapes lorsque l'application était très simple pourrait aider et voir si la rotation a fonctionné. –

Répondre

1

Solution: Il s'avère que j'étais un peu conservateur de la mémoire. Dans mon délégué de l'application, je voudrais créer une instance d'un viewController, l'ajouter à la fenêtre, et ensuite appelé release, en supposant qu'il a été ajouté à la fenêtre, donc je n'en aurais plus besoin. Mauvaise idée. Les messages shouldAutorotate sont donc envoyés à un objet qui n'existe plus. J'ai reçu un message dans ma console à propos d'un message envoyé à un objet publié, mais seulement plusieurs secondes (environ 20) après avoir fait pivoter le simulateur.

J'ai appris que vous devez toujours garder une référence à votre « viewController principal/racine » comme une variable d'instance dans appDelegate

+0

Merci d'avoir posté la solution, vous pouvez l'accepter par vous-même. –