8
votes

coordonnées de fenêtre de paysage correct de l'iPhone

J'essaie d'obtenir les coordonnées de la fenêtre d'une vue de table à l'aide du code suivant:

[self.tableview.superview convertrect: Self.tableview.frame ToView: nil]

Il indique les coordonnées correctes tout en mode portrait, mais lorsque je tourne à la pharmacie, il ne rapporte plus de coordonnées correctes. Tout d'abord, il renvoie les coordonnées X, Y et la largeur et la hauteur. Ce n'est pas vraiment le problème cependant. Le vrai problème est que les coordonnées sont incorrectes. En portrait, les coordonnées de la fenêtre de la vue de la table sont {{0, 114}, {320, 322}}, tandis que dans le paysage, les coordonnées de la fenêtre sont {{32, 0}, {204, 480}}. De toute évidence, la valeur X ici est incorrecte, non? Ne devrait-il pas être 84? Je cherche une solution à ce problème, et si quelqu'un sait comment obtenir la fenêtre correcte coordonnées d'une vue en mode paysage, je l'apprécierais grandement si vous partagiez cette connaissance avec moi.

Voici quelques captures d'écran afin que vous puissiez voir la mise en page de vue.

Portrait: http://i.stack.imgur.com/iakjc.png

Paysage: http://i.stack.imgur.com/jhuv6.png


1 commentaires

Je vois le même problème. Parfois, il calcule correctement les coordonnées, parfois cela ne le fait pas.


5 Réponses :


0
votes

Vous devriez pouvoir obtenir les coordonnées actuelles de la vue Table de Self.tableview.bounds


0 commentaires

0
votes

Votre code devrait être: xxx

qui vous donnera le rectangle de la vue dans le système de coordonnées de la fenêtre. Assurez-vous d'utiliser des "limites" et non "Cadre". Le cadre est le rectangle de la vue dans son système de coordonnées de vue parent déjà. "Bounds" est le rectangle de vue dans son propre système. Donc, le code ci-dessus pose la vue Table de convertir son propre rectangle de son propre système au système de la fenêtre. Votre code précédent posait la vue parent de la table de convertir le rectangle de la table du système de coordonnées parent en rien.


1 commentaires

En fait, la documentation de Convertrect: TOVIEW: dit: "Si la vue est nulle, cette méthode convertit à la base des coordonnées de la base de fenêtres." J'ai essayé votre code et cela donne le même résultat que le mien. Merci même pour la suggestion.



6
votes

J'ai trouvé ce que je crois être les débuts de la solution. Il semble que les coordonnées que vous et que je constate sont basées sur le fond à gauche ou en haut à droite, selon que l'orientation est UiTorfaceOrientationlandscaperight ou uiterfaceorientationlandscapeleft.

Je ne sais pas encore pourquoi, mais j'espère que cela aide. :)

[Mise à jour] Donc, je suppose que l'origine de la fenêtre est de 0,0 en mode portrait normal et tourne avec l'iPad / iPhone.

Voici comment j'ai résolu cela.

Premier je saisis mon orientation, limites de la fenêtre et le rect de mon point de vue dans la fenêtre (avec les coordonnées nonky) xxx

alors si l'orientation est un paysage, je retourne aux coordonnées x et y et le largeur et hauteur xxx

puis j'appelle ma fonction pour la fixation de l'origine à être basée en haut à gauche, quelle que soit la rotation de l'iPad / iPhone. Il fixe l'origine en fonction de l'endroit où 0,0 vit actuellement (selon l'orientation) xxx

voici les deux fonctions que j'utilise xxx


0 commentaires

0
votes

Essayez les limites au lieu du cadre self.parentviewcontroller.view.bounds car cela me donne des coordonnées ajustées en fonction de l'orientation actuelle


0 commentaires

3
votes

Ceci est un piratage, mais cela fonctionne pour moi: xxx

Je ne suis pas sûr que c'est la meilleure solution. Il peut ne pas fonctionner de manière fiable si votre contrôleur de vue racine ne prend pas en charge les mêmes orientations que le contrôleur de vue actuel.


0 commentaires