les orientations avec "shouldAutorotateToInterfaceOrientation"
motohime
Membre
Bonjour,
Je développe actuellement une application sur Ipad, et elle nécéssite des rotations selon l'orientation du device.
J'ai donc utilisé la méthodes "shouldAutorotateToInterfaceOrientation" dans mes UIViewController, et cela fonctionnait parfaitement tant que j'étais sur IOS 4.3 ( la méthode était appelé à chaque rotation du device avec en paramètre les bonne orientations.
Cependant depuis que j'ai mis l'ipad à jour (ios 5.1), cela ne fonctionne plus correctement. La première vue initialisé fonctionne , puis les autres non . Toutes mes autres vues recoivent des events sur les rotations du device mais uniquement les orientation portrait ( plus aucuns landscape...) .
J'ai lu qu'il y avait eu des modifications sur le sujet dans les dernières version de IOS mais je n'arrive pas à trouver la solution... Serais ce possible de m'aiguiller plz ?
Mon code utilise aussi OpenFrameWork mais mon soucis normalement est uniquement dans mes vue Cocoa.
J'ai bien setter dans les propriété de mon projets les orientations que je désiraient ( landscape ).
voici comment s'achemine mon code (globalement)
//*****************************************************************
Ma première vue ( Accueil reçoit bien tout les événements de rotation et se réoriente.
Ensuite lorsque je change de vue :
//*****************************************************************
Voila globalement comme s'oriente mes changement de vue.
Merci d'avance de votre aide.
PS: si il manque des infos je me ferais un plaisir de vous les fournir.
Je développe actuellement une application sur Ipad, et elle nécéssite des rotations selon l'orientation du device.
J'ai donc utilisé la méthodes "shouldAutorotateToInterfaceOrientation" dans mes UIViewController, et cela fonctionnait parfaitement tant que j'étais sur IOS 4.3 ( la méthode était appelé à chaque rotation du device avec en paramètre les bonne orientations.
Cependant depuis que j'ai mis l'ipad à jour (ios 5.1), cela ne fonctionne plus correctement. La première vue initialisé fonctionne , puis les autres non . Toutes mes autres vues recoivent des events sur les rotations du device mais uniquement les orientation portrait ( plus aucuns landscape...) .
J'ai lu qu'il y avait eu des modifications sur le sujet dans les dernières version de IOS mais je n'arrive pas à trouver la solution... Serais ce possible de m'aiguiller plz ?
Mon code utilise aussi OpenFrameWork mais mon soucis normalement est uniquement dans mes vue Cocoa.
J'ai bien setter dans les propriété de mon projets les orientations que je désiraient ( landscape ).
voici comment s'achemine mon code (globalement)
<br />
J'ai une UIWindow (que l'ont va nommé App dans l'exemple de code)<br />
<br />
initialisation de deux vues ( UIViewController)<br />
_FUSAcceuilGUI = [[FUSAcceuilGUI alloc] initWithNibName:@"FUSAcceuilGUI" bundle:[NSBundle mainBundle]];<br />
<br />
_FUSPlayerGUI = [[FUSPlayerGUI alloc] initWithNibName:@"FUSPlayerGUI" bundle:[NSBundle mainBundle]];<br />
<br />
<br />
//On installe ensuite le navigateur controlleur<br />
_FUSNavigatorGUI = [[UINavigationController alloc] initWithRootViewController:_GUIStore];<br />
<br />
//On cache notre navigator<br />
_FUSNavigatorGUI.navigationBarHidden = YES;<br />
<br />
//add une vue à la uiWindow<br />
[App addSubview:FUSAcceuilGUI.view];<br />
//*****************************************************************
Ma première vue ( Accueil reçoit bien tout les événements de rotation et se réoriente.
Ensuite lorsque je change de vue :
<br />
//Delete les vues possiblement déjà ajouter à la UIWindow<br />
[FUSNavigatorGUI.view removeFromSuperView];<br />
[FUSAcceuilGUI.view removeFromSuperView];<br />
<br />
//add une vue à la UIWindow<br />
[App addSubview:FUSPlayerGUI.view];<br />
//*****************************************************************
Voila globalement comme s'oriente mes changement de vue.
Merci d'avance de votre aide.
PS: si il manque des infos je me ferais un plaisir de vous les fournir.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Pour répondre à ta question, les changements qu'il y a eu à propos des rotations ont eu lieu dans iOS 6 qui est encore sous NDA donc on n'en parlera pas ici.
En ce qui concerne ta rotation, tu ne t'y prends pas du tout de la bonne façon!
UIKit utilise à fond le pattern MVC (même si en réalité c'est plus un pattern PAC, mais peu importe), c'est à dire qu'il utilise les UIViewController pour faire le lien entre les vues et les données
Et c'est justement ces UIViewController qui vont gérer la rotation.
Ton problème ici est que tu ajoutes les vues directement à ta hierarchie de vues au lieu d'utiliser les UIViewController pour ça.
Je te conseille de regarder cette vidéo des CocoaHeads qui explique justement tout ça.
la méthode "shouldAutorotateToInterfaceOrientation" ne sert qu'a l'init de la vue pour savoir comment elle dois s'afficher.
Au lieu de faire mes addSubView sur ma UIWindow il faudrait que je fasse dans mon cas : "App.rootViewController = FUSAcceuilGUI;"
Pour effectuer mes rotations du coup je dois use les méthodes : "UIApplicationWillChangeStatusBarOrientationNotification" et "UIApplicationDidChangeStatusBarOrientationNotification" avec des blocs d'animation.
est ce bien cela ?
Si oui une question me trotte dans la tête. Pour quelle raison actuellement ma méthode "shouldAutorotateToInterfaceOrientation" est appelé à chaque fois que mon device change d'orientation ( sur ma vue initiale je reçoit bien à chaque orientation du device les événements avec les bonnes orientations, mais une fois sur un autre controller je ne reçoit plus que les portraits).
Sinon pour ton cas je pense que tu n'as pas besoind'utiliser la notification de changement de rotation,
il te suffit d'implémenter les shouldAutorotateToInterfaceOrientation comme tu fais, mais par contre tu ne dois pas ajouter les vues de tes controlleurs "à la main".
Je te conseille d'avoir un UIViewController root qui ne change pas (tu peux par exemple mettre un UINavigationController, ou bien un UITabBarController, voire même un UIViewController custom) et sur ce controller root, tu viens "pusher" le controller qui t'intéresses.
Ok je vais aller me présenter.
Merci infiniment.
http://forum.cocoaca...__fromsearch__1
Edit : zut, je n'ai pas posté où je voulais...