Comment vérifier dans quelle position (paysage ou portrait) est l'iPhone maintenant?
J'ai une application avec une barre d'onglet, et de la valeur liquidative des contrôleurs dans chaque onglet. Lorsque l'utilisateur secoue l'appareil, un UIImageView
apparaît comme un enfant de vue de la valeur liquidative du contrôleur. Mais le UIImageView
doit contenir une image en particulier, selon le dispositif actuel de l'orientation.
Si je vous écris juste
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)
if (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) {
//Code
}
else if (interfaceOrientation == UIInterfaceOrientationLandscapeRight||interfaceOrientation == UIInterfaceOrientationLandscapeLeft) {
//Code
}
}
La vue va juste fou si l'utilisateur fait pivoter l'appareil avant de l'agiter.
Est-il une méthode pour obtenir des iPhones orientation actuelle?
Vous devez vous connecter pour publier un commentaire.
Utiliser le
[[UIDevice currentDevice] orientation]
méthode, comme spécifié ici.UIDeviceOrientation
, qui est unenum
d'une certaine liste de valeurs.-interfaceOrientation
à la place. Qui n'a pas de valeur Inconnue, de sorte que vous aurez toujours quelque chose de bien défini par l'arrière, plutôt que d'avoir à en déduire une orientation.-(UIInterfaceOrientation)interfaceOrientation
méthode déclarée surUIViewController
fonctionne très bien.landscape
ouportrait
cela vous en dit plus:landscape
,portrait
ouflat
Ici sont des macros
UIDeviceOrientationIsLandscape
etUIDeviceOrientationIsPortrait
donc plutôt de vérifier séparément, vous pouvez le faire comme ceci ...
OU
Comme beno dit, cela semble une meilleure solution si vous êtes à la détection de l'orientation de début de votre point de Vue. Je ne pouvais pas obtenir approuvé réponse à retourner un résultat au début de mon installation, mais cela fonctionne à merveille.
self
dans votre code est une instance de UIViewController.Addon pour le déjà répondu à la question:
Vous utilisez
[[UIDevice currentDevice] orientation]
qui donnera une de ces valeurs:La documentation peut être trouvée ici - (orientation) et ici - (UIDeviceOrientation).
(Je ne veux pas prétendre à l'ancien réponse, mais cette information était de grande pour un commentaire.)
Vous pouvez également utiliser le interfaceOrientation propriété de la classe UIViewController, si vous êtes coincé et en permanence faire UIDeviceOrientationUnknown de UIDevice.
Il y a un bon résumé de pourquoi [[UIDevice currentdevice] orientation] peut parfois échouer ici: http://bynomial.com/blog/?p=25, surtout si vous voulez détecter l'orientation rapidement (par exemple, si vous vouliez vérifier droit lors de l'application qui vient de sortir de l'arrière-plan).
Il vous aide à...
Essayez ceci:
Ou Swift 3:
Pour contrôler spécifiquement pour une orientation particulière, vous pouvez également essayer les
isLandscape
ouisPortrait
propriété comme suit:Le problème avec
[[UIDevice currentDevice] orientation]
est qu'il est également de retourUIInterfaceOrientationUnknown
quistatusBarOrientation
ne le fait pas.Il y a aussi un
UIViewController
propriétéinterfaceOrientation
mais elle a été frappée dans iOS 8, il n'est donc pas recommandé.Vous voir la documentation pour les
statusBarOrientation
iciVous pouvez également définir des constantes pour gagner du temps :
Aussi Simple Solution de Swift 4.2
Vous pourrez le consulter comme (Swift 3):
Si vous êtes dans un ViewController, vous pouvez aussi faire comme si (c'est ce que j'ai fait):
Bien que même ce qui devrait être suffisant dans ce cas:
Mise à jour de ce à iOS 8+ où la
UIViewController.interfaceOrienation
est obsolète, vous devez utilisertraitCollections
. Ainsi, par exemple, pour vérifier paysage sur l'iPhone, vous pouvez utiliser:Avis que ce n'est pas le cas sur l'iPad, parce que sur l'iPad en mode paysage, la taille de la classe n'est pas
compact
.Apple Doc Lien
Obtenir l'orientation actuelle
UIDevice
, thxEt si vous voulez simplement savoir si l'appareil est en mode paysage ou portrait, une solution très simple (rapide):