[Résolu] Swift 3 : Orientation forcée compliquée
Bonjour à tous.
Je met du texte bold pour vous faire gagner du temps dans ce post certainement trop long.
Je reviens donc vers vous, car mon appli était presque prête à être publiée sur l'ApStore,
mais évidemment, comme rien n'est simple, il faut maintenant que l'appli fonctionne aussi sur iPad 12,9 pouces, et aussi en ios10.
Voici la question (et plus bas, les informations nécessaires à la compréhension) :
Comment forcer le landscape sans avoir de crash ?
Explications :
J'ai donc fait la mise à jour de Xcode (Version 8.1 (8B62)), et tout passé en swift 3, suite à de nombreuses lectures sur le web. Je suis en iOS 9.3 minimum.
J'ai fait la conversion swift 3,
recalé le storyBoard avec la nouvelle méthode de Xcode (device, orientation, vary for traits),
modifié plusieurs dimensions qui étaient fixes (car c'était prévu au départ pour 1024x768) en relatif par rapport au MainScreenSize dans le code.
C'est du sport, tout ça.
Après pleins de vérifs et de contrôles, j'ai du faire quand même des adaptations un peu bizarres.
Bref, je viens ici surtout pour un problème un peu grave que plusieurs personnes sur le web ont également relevé.
Et je ne suis pas parvenu à le régler.
En gros, il s'agit de l'orientation. Je dois être en landscape toujours, jamais de portrait.
Vous connaissez, j'en suis sûr ce message d'Apple :
"Supported orientations has no common orientation with the application"
Donc, obligé de mettre portrait dans le build sinon ça crash.
Et donc, sur le simulator, je vérifie sur 9 pouces et 13 pouces.
Et lorsque je change de device, ça arrive en portrait. Je rotate donc, et relance l'appli et c'est ok.
Sur mon ipad2 (vrai device), ça marche nickel partout sauf quand je vais chercher une image dans l'album, il arrive toujours en portrait.
Puis, les méthodes suivantes ne fonctionnent plus :
override var supportedInterfaceOrientations : UIInterfaceOrientationMask {//not working
return .landscapeLeft
}
override var shouldAutorotate: Bool {//not working
return false
}
J'ai également éplucher ce lien d'Apple.
Et, bof... Plein d'essais non concluants.
Voilà , j'espère ne pas avoir été insupportablement long, mais c'est un peu hard d'expliquer tout ça succinctement...
Merci d'avance pour une éventuelle suggestion...
Réponses
Si ton application doit fonctionner uniquement en Landscape, il faut évidemment mettre cette valeur à Landscape uniquement. Je précise, parce que tu sembles dire le contraire plus haut.
Merci pour ta réponse.
Avant cette dernière mise à jour, pas de portrait dans le panneau général de Xcode.
Après, obligé, sinon crash. Et message Apple.
Dans mon info.plist, j'ai les 3 orientations pour iPad : portrait, landscapeLeft et right.
Le message qui s'affiche
indique justement qu'il y a une incohérence avec ce réglage.
Je viens de faire l'essai, et il n'y a RIEN d'autre à faire. Il ne faut implémenter supportedInterfaceOrientations() que si justement ça diffère du cas général.
Par contre, je viens de lire dans la doc de UIImagePickerController que, sur iPad, celui-ci doit nécessairement être présenté dans un Popover quand on affiche la Photo Library; sinon, exception.
Pourquoi tu as mis seulement .landscapeLeft ? Qu'est-ce qui se passerai avec un gaucher ?
ah merci à vous, je ré-essaie tout ça...
Bon, en fait j'ai un peu tout mélangé (ça sent la tête dans l'guidon, comme d'hab.).
C'est justement en cherchant sur le web pour avoir un UIImagePickerController en paysage... J'ai vu qu'il fallait cocher portrait puis etc...
Bref, d'la m... Je suis d'accord.
En tout cas, effectivement plus de problème d'orientation (pour l'appli) en 9 et en 13 pouces.
Et sans implémenter supportedInterfaceOrientations.
Par contre, le UIImagePickerController est effectivement en portrait, et ça, c'est impossible dans cette appli.
Je l'avais auparavant, avant cette mise à jour, en mode paysage. avec les deux méthodes supportedInterfaceOrientations.
Concernant la doc Apple qui dit en portrait, cela marchait quand même en paysage et ne marche plus.
Voici mon ancien code et mon nouveau.
Ancien code:
Nouveau code :
Une idée pour un picker en mode paysage, ou bien on est obligé de se plier à cette contrainte Apple ?
Merci d'avance...
Bon, ben bonjour les dégâts
En 13 pouces, si je cherche une photo dans l'album, ça crash.
Et je ne comprend rien au message d'Apple.
J'ai par ailleurs du code qui s'est inscrit dans plusieurs de mes controllers (le coup du fileprivate) :
Mais pas dans celui qui m'a fait planter.
Et sur les écrans où il est ajouté, si je le met en commentaire ou pas, cela ne semble pas poser de problème...
Voici le code :
J'ai lu également plein de trucs sur ce truc, mais je n'y comprend rien.
Merci d'avance
Le dossier en question :
J'avais fait ça, suite à la mise à jour :
Voir ce lien qui l'explique, puis je met une copie de mon info.plist plus loin.
Et par contre, si je remet portrait dans le panneau Xcode général et donc il se met automatiquement dans le plist,
eh bien ça ne crash plus, mais j'ai les pas d'orientation appli et un picker vertical... Pfff
J'ai l'impression de me transformer en jongleur débutant à 10 mètres du sol.
A part ça, j'avais cette fonction en ios8 qui permettait d'avoir le picker en paysage, et qui marche plus en ios9 minimum
Et comme je suis têtu, je cherche quand même à avoir mon picker en paysage.
Mais je n'y arrive pas, car ça commence à faire appel à des notions qui me dépassent.
Voici les liens que je visite et dont j'essaie les propositions :
Extension picker
Supported orientation
Merci de votre aide...
Bon, je continue à me parler à moi-même :
J'ai enfin trouvé la solution.
Pour ceux que ça intéresse,
Elle est là
En swift 3, on peut quand même détecter quand on tourne l'iPad.
Et après, on fait ce que l'on veut...
Avec ça :
Voilà , surcharger la méthode "viewWillTransition".
Ils sont bons aussi sur stackoverflow.
Bon, je met "Résolu".
Merci à ceux qui ont tenté de m'aider.
Je reste convaincu, que ke n'ai pas été très clair sur ce coup là , et que j'ai un peu surchargé ce post de multiples infos un peu soulantes. Désolé.
:-*