7
votes

Quelle est la bonne façon de détecter l'orientation de l'interface au lancement?

[question mise à jour]

Voici donc le problème, je l'ai finalement réduit à cela. Si vous créez une nouvelle uIViewController dans toutes les méthodes p>

if (UIDeviceOrientationIsPortrait(interfaceOrientation)) {
    // layout subviews for portrait mode
} else {
    // layout subviews for landscape mode
}


1 commentaires

J'ai essayé de faire la vérification de uidevicedientationisportrait () dans layouplievis d'un uIView Sous-classe et je reçois les bonnes orientations. Avez-vous un autre code que vous pourriez partager cela pourrait aider à identifier ce que le problème est? Vous vous demandez également si les valeurs d'uideviceorientation et d'uiterfaceorientation pourraient être utilisées de manière interchangeable? Cela m'a été coincé avec des bugs étranges auparavant.


3 Réponses :


8
votes

Essayez [[uiapplication SharedApplication] StatutBarorientation] .


1 commentaires

Est-ce différent de [[uiapplication SharedApplication] StatutBarorientation]?



1
votes

Je ne suis pas sûr que cela résoudra réellement mon problème, mais que je regarde la documentation que j'ai trouvée ce qui suit: xxx

et xxx p > Donc, depuis que Facep et facedown ont été ajoutés à regarder l'orientation de l'appareil est inutile pour des raisons d'interface. Théoriquement, @Markadams mentionne juste que, dans ce cas, [[uiapplication SharedApplication] StatutBarorientation] doit être utilisé pour l'orientation de l'interface.

ou bien sûr que UIViewController a l'option "InterfaceCorIdation".


0 commentaires

6
votes

La manière appropriée est de demander au périphérique fort> pour son orientation comme vue techniquement n'a aucune orientation. ;)

donc vous êtes correct en utilisant uidevice code>. De Documentation Vous pouvez voir Vous devez d'abord générer des notifications d'orientation de périphérique avant que ces informations soient correctes. Ensuite, cela fonctionnera comme souhaité. P> xxx pré>

Remarque: em> Cela vous donne l'orientation actuelle de l'appareil. Si le contrôleur actuellement visible / Top View a fait non fort> autoriser la rotation à cette orientation, vous obtenez néanmoins l'orientation du périphérique actuel, et non celle du contrôleur d'affichage le plus haut utilisé actuellement. P>


edit em> après la question a été mis à jour: p>

Vous avez raison que l'orientation du contrôleur d'affichage le plus haut (fonctionnement correctement pour les contrôleurs de sous-SUPVIEW) renvoie toujours 1 (c.-à-d. UIInterfaceOrientationportrait ) dans loadview code>. Toutefois, la méthode willroteatetterfaceorientation: durée: code> sera immédiatement appelée, et l'orientation passée est correcte, vous devriez donc pouvoir utiliser cette méthode. P>

- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toIfaceOrient
                                 duration:(NSTimeInterval)duration


2 commentaires

Hey Pascal, cela fonctionnerait pour l'Uidevice cependant ce n'est pas ce que je cherche. J'ai finalement réduit le bogue, je mettrai à jour ma question.


J'ai mis à jour la réponse, peut-être que cette méthode est une solution à votre problème.