2010-09-28 30 views
2

Mise à jour: Résolu. Voir fix au fond.Alertes en mode portrait, iPad en mode paysage et impossibilité de faire pivoter quoi que ce soit à l'exception de l'autre paysage (180 degrés)

Dans mon application iPad qui prend en charge toutes les orientations, si l'application est chargée dans le paysage, les choses étranges se produisent:

  1. vues d'alerte apparaissent en mode portrait, même si le reste est dans le paysage
  2. Rotation de l'iPad de paysage en portrait ne déclenche pas de rotation (et ne déclenche aucune des méthodes de style shouldAutorotate). La rotation de l'iPad de 180 degrés (vers «autre paysage») déclenche la rotation et, par la suite, l'iPad se comporte normalement (c'est-à-dire qu'il tourne correctement en mode portrait et paysage lorsqu'il est pivoté).

Écran de vue d'alerte ci-dessous. Bizarre, étrange. Des idées pour lesquelles cela pourrait se produire? Cela se produit uniquement lors du chargement en mode paysage - le chargement en mode portrait puis la rotation vers le mode paysage fonctionnent parfaitement. Landtrait!

Solution: Ce problème est survenu parce que j'ajoutais un UIViewController (modalement) au-dessus du contrôleur principal de vue dès que l'application a terminé le chargement (plus précisément, dans la méthode viewDidAppear: de l'application).

iOS envoie un certain nombre de (4) shouldAutorotateToInterfaceOrientation: appels au contrôleur courant/vue principale après que les choses ont démarré, pour comprendre quelles orientations sont actuellement supportées. Quand j'ai ajouté l'autre VC si tôt, cela s'est produit au milieu des appels susmentionnés. Ainsi, je n'ai reçu qu'un ou deux appels (pour "portrait", car cela commence par le portrait). Le contrôleur de vue principal a ensuite été laissé avec un support par défaut de "NON" pour les orientations paysage, mais le contrôleur de vue nouvellement ajouté (qui est également interrogé sur les orientations) répond maintenant avec joie oui. "

Si j'avais enlevé l'autre VC (qui est en paysage), je me serais rendu compte que mon contrôleur de vue principale était coincé en portrait. J'avais donc une vue de portrait, au sommet de laquelle il y avait une vue de paysage. Les alertes et tels ont tenu compte de l'orientation de la première, d'où les résultats désastreux ci-dessus.

De plus, si j'essayais de faire pivoter en portrait, je ne pouvais pas, car le contrôleur de la vue principale était déjà en mode portrait. La rotation vers le paysage était également impossible car l'autre contrôleur de vue est déjà en paysage. Ce n'est que lorsque j'ai fait la rotation «paysage mais que l'autre», les deux contrôleurs de vue ont convenu que la rotation était nécessaire, et donc l'appareil a tourné.

La solution dans mon cas était de simplement mettre la création de l'autre contrôleur à un léger retard. en utilisant performSelector:withObject:afterDelay. - 0 semblait fonctionner mais je l'ai juste mis à 1 pour être sûr. Ca a l'air un peu bizarre, avec le vc principal apparaissant et ensuite l'autre vc, mais c'est mieux que ce qui précède.

+0

Apple a quelques questions techniques sur les problèmes d'orientation. Peut-être que l'un d'entre eux aidera? Questions et réponses techniques QA1588: Prise en charge automatique de l'orientation pour les applications iPhone et iPad - http://developer.apple.com/library/ios/#qa/qa2010/qa1588.html Questions et réponses techniques QA1689: Orientations de prise en charge des applications pour iPad - http : //developer.apple.com/library/ios/#qa/qa2010/qa1689.html Questions et réponses techniques QA1688: Pourquoi mon UIViewController ne tourne-t-il pas avec l'appareil? - http://developer.apple.com/library/ios/#qa/qa2010/qa1688.html –

+0

Robot K: merci pour les pointeurs, j'ai lu et j'ai fait tout ce que je ne faisais pas déjà (le Default-Landscape et Images -Portrait) mais cela n'a pas aidé. Puis j'ai finalement remarqué que le problème se produit si j'ajoute un autre UIViewController modalement juste après le démarrage de l'application. Mettra à jour mon Q avec une meilleure explication - en attendant, s'il vous plaît poster ce qui précède comme la réponse afin que je puisse le marquer? – Kalle

Répondre

0

Ce problème est survenu parce que j'ajoutais un UIViewController (modal) sur le contrôleur principal dès que l'application a terminé le chargement (plus précisément, dans la méthode viewDidAppear: de l'application).

Voir ci-dessus pour plus de détails sur la solution.

0

Utilisez UIAlertController au lieu de UIAlertview. J'ai le même problème et c'est maintenant réparé.

+0

UIAlertController a été ajouté dans iOS 8, cette question est de 2010. :) –