2010-09-15 3 views
1

J'essaie de configurer une application de test pour iPad, basée sur une fenêtre, où j'ai un seul contrôleur de vue et une seule vue. Lorsque je fais pivoter l'iPad, je souhaite que l'orientation de la barre d'outils change, mais pas celle de la vue elle-même. Par exemple, une sorte de vue d'arrière-plan dans laquelle vous travaillez est corrigée sur le périphérique, mais la barre d'état et les barres d'outils pivotent autour. Cela permettrait à l'utilisateur de travailler la vue sous tous les angles, mais toujours avec un jeu d'outils correctement orienté.Modification de l'orientation de l'iPad, rotation de la barre d'état, barres d'outils, mais pas de la vue principale

Une belle mise en œuvre de ce que je veux peut être trouvé dans les brosses pour l'application iPad, où l'orientation de la peinture est verrouillée sur l'appareil, et les barres d'outils pivoter autour d'elle. Je pense que d'autres applications de peinture font la même chose.

J'ai essayé de comprendre comment faire cela, mais après avoir épuisé beaucoup de beaucoup d'autres questions ici au sujet de l'orientation, je suis toujours à perte.

Quelqu'un pourrait-il me diriger dans la bonne direction vers une solution soignée? Une combinaison particulière d'autoresizes pour l'autoresizeMask? Contrer l'animation de rotation avec un autre dans la direction opposée? Utilisation de plusieurs contrôleurs de vue simultanés, un pour les vues rotatives et un pour les non-rotatives?

Je serais très reconnaissant de bien vouloir,

(Edit: a tenté de clarifier la question, après le commentaire de Olie.)

+0

J'ai voté votre question, mais vous voudrez peut-être donner une brève modification de préciser que l'effet que vous recherchez est pour qu'il y ait une sorte de « l'image d'arrière-plan/vue » qui reste bloqué sur le dispositif, avec le contrôleur de vue tournant sur le dessus.Je comprends cela maintenant, mais ce n'était pas clair quand j'ai lu la question à l'origine. – Olie

Répondre

0

J'ai eu un bug qui a fait un certain temps - je suis sûr que ce que vous demandez vous obtenir un rejet HIG-violation d'Apple. Cependant, je vais tenter de me souvenir du problème. Je suis sûr que c'était quelque chose comme ceci:

J'ai eu un tabbarViewController qui dit: «J'oriente à toute orientation. »

L'un des onglets était un UIViewController régulier vieux qui dit: « Je ne fais que LandscapeLeft & L-droit »

Lorsque vous mis en rotation, l'intérieur (UIVC) est resté mis, mais l'extérieur (TabVC) mis en rotation autour des choses.

je pourrais avoir quelques-uns des détails en arrière ou autrement alambiquée, mais les idées générales est: VCs empilés, pas tous un VC.

Bonne chance!

+0

Merci pour votre réponse. Je l'ai fait fonctionner il y a un certain temps. Quelqu'un m'a signalé la solution: Dans la méthode '-loadView' du contrôleur de vue dont vous voulez corriger la vue, utilisez la méthode' -insertSubview: belowSubview: 'de' UIWindow', en insérant la vue non rotative ci-dessous la vue du contrôleur de navigation. Cela fonctionne parfaitement. –

+0

Ah, voilà. Idée très similaire, vous venez d'attacher une 2ème vue à la fenêtre, alors que j'ai empilé des contrôleurs de vue. En général, j'ai tendance à essayer d'avoir exactement une vue (avec son contrôleur de vue) dans la fenêtre, puis tout le reste sous-visualisé à partir de cela. Je ne sais pas pourquoi, mais ça me semble "plus propre". Peu importe, votre façon de travailler fonctionne - et n'est pas terrible - et c'est ce qui compte. – Olie

1

Pour éviter la rotation, vous mettiez dans votre contrôleur vue de. m:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 

Mais vous dites que vous souhaitez toujours redimensionner le cadre de vue en réponse à la rotation. Je n'ai pas eu besoin de le faire moi-même, donc je ne suis pas sûr qu'il soit suffisant de régler le autoresizingMask pour avoir une largeur et une hauteur flexibles; vous devrez peut-être également implémenter didRotateFromInterfaceOrientation: et utiliser setNeedsLayout et/ou redimensionner la vue manuellement.

+0

Merci d'avoir répondu, mais contrôler la rotation d'une seule vue n'est vraiment pas le problème ici. Ce que je veux, c'est que la vue principale reste fixe et que la barre d'état et les barres d'outils tournent autour quand l'orientation change. Pour que l'écran entier soit en rotation ou non, il s'agit d'un comportement de rotation différent pour différentes parties du même écran. –

0

Dans la mesure où j'ai travaillé avec, je ne vois pas de réponse simple à votre question. Qu'en est-il de tout faire pivoter (tabulation, barre de navigation et d'état, votre contrôleur de vue) et redessiner le contenu de votre contrôleur de vue dans "anciennes coordonnées" pour que l'utilisateur n'ait pas l'air de pivoter?

Questions connexes