UI iOS4.3(+), iPhone 6(+) et statusBar
Hello la troupe,
J'ai quelques questions encore relatives aux UI sur les différentes versions d'iOS. A savoir que mon projet est rétro compatible jusqu'a la 4.3, je suis obligé d'utiliser des .xib.
J'ai fais quelques constatations:
- Sur iOS 7+, lorsque l'on met le device en mode landscape la statusBar disparait. Sur les versions antérieurs elle reste.
- Lorsque je fais un setTransform d'une UIView sur une version antérieurs à la 8, il est alors impossible de savoir si la statusBar sera la après Rotation.
Donc impossible de créer une super vue dynamiquement (ça n'est pas un viewcontroller) qui soit adaptée à tous les OS.
Ma question est: Comment savoir si la statusBar sera la après la rotation?
P.S: [[UIApplication sharedApplication] statusBarFrame] et autres méthode du genre me donne la valeure actuelle, pas celle une fois la rotation effectuée.
Réponses
Même dans ce genre de méthode ? :
Bah enfaite, moi pour detecter le changement d'orientation je faisais comme ça:
Bon sinon maintenant y'a les UIViewControllerTransitionCoordonator qui te permettent de faire des animations pendant les rotations, coordonner ces animations avec une anim de rotation ou quoi, etc... Je sais pas si ça pourrait répondre à ton besoin, mais c'est bon de savoir que ça existe et ça peut valoir le coup de se renseigner dessus (perso j'ai pas encore regardé)
Oui vous avez raison, sur le will/did...
Je vais faire des tests mais j'ai peur que ça fasse moche si c'est fait après.
Au pire je peux toujours retouché ma view une fois que c'est fait ^_^
Le jour ou mon projet supportera au minimum iOS7 j'utiliserais les UIViewControllerTransitionCoordonator...
Pour l'instant, j'suis à l'ancienne <_<
Bon alors j'ai vérifié et je ne peux pas.
Dans la classe UIApplication:
Et moi j'ai besoin de la nouvelle
Pourquoi cette méthode:
me retourne: -5764607523034234862 ??
EDIT:
Bon ça avance... avec un intValue ça marche déja mieux ^^'
Le problème c'est que j'ai un observeur aussi sur: UIApplicationWillChangeStatusBarFrameNotification et là par contre je n'ai jamais la bonne.
Pour résumer: J'ai presque réussi.
Je connais mon orientation de destination et de depart.
Je connais la frame de ma status bar de depart mais pas d'arrivé malgré l'observeur sur UIApplicationWillChangeStatusBarFrameNotification qui contient toujours 0 !
- pour la notification "will" le userInfo contient l'orientation de destination. C'est logique, vu que cette notification est appelée AVANT la rotation, dont l'orientation de départ tu l'as déjà , c'est l'orientation actuelle, pas besoin de la remettre dans la notif. Par contre celle d'arrivée elle est dans la notif.
- pour la notification "did" cest l'inverse, elle est appelée après du coup l'orientation d'arrivée tu l'as déjà c'est l'orientation qui est maintenant l'orientation courante. Et l'orientation d'origine tu peux pas la deviner donc elle elle est dans le userInfo.
Pour la valeur farfelue que tu avais c'est normal tu récupérais le pointeur (adresse memoire) de l'objet NSNumber* au lieu de regarder sa intValue. T'aurais eu donc des valeurs de pointeurs différentes a chaque lancement. Mais bon tu as dû certainement avoir un beau warning si tu as essayé d'affecter le pointeur à une variable de type int normalement.
Oui oui Ali. C'est bien ce que j'ai fait:
Là mon problème n'est pas présent lors de mon premier affichage. La frame de la statusBar est bonne.
Le problème arrive quand j'effectue une première rotation en landscape PUIS que je reviens en portrait.
La valeur n'est plus bonne de landscape vers portrait.