Adapter l'écran quand on le fait tourner (affichage et coordonnées)
Minishlink
Membre
Bonjour tout le monde !
Je suis nouveau dans le monde du dev' iTouch et je me demande comment adapter l'écran quand on le fait tourner.
Je m'explique. Je voudrais faire en sorte que lorsque l'application se lance, un message apparait (juste un background) qui demande au joueur de tourner l'écran horizontalement afin de pouvoir jouer.
Je ne trouve pas la solution et j'ai un aussi un doute : est-ce que les coordonnées x,y de l'écran vont bien changer en fonction de l'orientation ? Si non, comment le faire manuellement ?
Merci
Je suis nouveau dans le monde du dev' iTouch et je me demande comment adapter l'écran quand on le fait tourner.
Je m'explique. Je voudrais faire en sorte que lorsque l'application se lance, un message apparait (juste un background) qui demande au joueur de tourner l'écran horizontalement afin de pouvoir jouer.
Je ne trouve pas la solution et j'ai un aussi un doute : est-ce que les coordonnées x,y de l'écran vont bien changer en fonction de l'orientation ? Si non, comment le faire manuellement ?
Merci
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Pour faire ce que tu veux c'est simple, il suffit de prévoir une sous-classe de ViewController et de l'utiliser dans ton application. Dans ta sous-classe il suffit de surcharger alors : En effet, cette méthode est appelée pour savoir si tu as "le droit" de faire tourner l'interface de ton appli, quand tu tournes ton iPhone ou iPod Touch, ça appelle cette méthode pour vérifier si ça va tourner automatiquement l'interface... ou pas.
La doc ici
Après, dans IB, tu peux cliquer dans la barre de titre de la fenêtre dot tu veux créer l'interface (ta NSWindow) : à droite de la barre de titre y'a une petite flèche et si tu cliques dessus ça va tourner la fenêtre pour te permet de faire le design de ton interface horizontale directement
D'ailleurs tu peux aussi imposer l'orientation de ton interface au lancement aussi, pour que ça tourne ton interface directement au lancement. Comme ça quand l'utilisateur va lancer ton appli, ton interface va tourner directement sans te demander ton avis donc l'utilisateur va évidemment tourner son iPhone/iPod Touch pour utiliser ton appli. C'est comme ça que font toutes les applis prévues pour ne fonctionner qu'en mode paysage d'ailleurs, à ma connaissance
tu peux lorsque ton appli se lance forcer le mode paysage
par exemple ceci
de plus de mémoire faut le modifier aussi dans ton .plist et ca ira toujours en mode landscape meme si tu le retourne ca ne changera rien
J'ai donc mis ça dans ma classe ApplicationDidFinishedLaunching ou un truc comme ça :
L'iPod est bien tourné vers la droite direct quand je lance le simulateur, mais quand je regarde les coordonnées X et Y se sont les mêmes que quand il est droit !
N'y a-t-il pas un moyen d'adapter les coordonnées ?
Merci encore ! (faudrait changer ce smiley qui donne l'air c*n d'ailleurs les smileys du forum sont trop dans l'extrême de ce qu'ils doivent exprimer...)
et la modif du.plist ca suffit largement enfin tout dépend de tes besoins :(renaud): celui la est mieux
(Ce que je veux exactement maintenant c'est que le coin haut/gauche quand on a tourné l'écran soit aux coordonnées 0, 0)
tu mets UIInterfaceOrientation
et tu lui donne la valeur UIInterfaceOrientationLandscapeRight ( par exemple :brule: )
application.statusBarOrientation = UIInterfaceOrientationLandscapeRight;
Et j'ai aussi le shouldautorotate.
Ca ne mets pas le coin haut/gauche aux coordonnées 0, 0...
par exemple en haut a gauche valeur x O et y O
par défaut c'est au centre
Je vais sans doute devoir faire sans
Il faut prendre les coordonnées relativement à la vue :
location=[aTouch locationInView:self.view];
NSLog(@in view : (%.2f,%.2f),location.x,location.y);
Autrement tu as la property transform qui permet de changer le context graphique.
remarque : Dans cet exemple, location=[aTouch locationInView:self.view]; est remplacé par location=[aTouch locationInView:self]; car c'est l'UIView qui répond à l'événement, et non l'UIViewController.
De plus, ils ont ajusté la lecture par location.y = bounds.size.height - location.y;
Implémentation du ViewController :
[tt]
#import "ViewController.h"
@implementation ViewController
-(void)dealloc
{
[super dealloc];
}
-(void)viewDidLoad
{
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
[super viewDidLoad];
if (orientation == UIInterfaceOrientationLandscapeRight)
{
CGAffineTransform transform = self.view.transform;
// Use the status bar frame to determine the center point of the window's content area.
CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame];
CGRect bounds = CGRectMake(0, 0, statusBarFrame.size.height, statusBarFrame.origin.x);
CGPoint center = CGPointMake(bounds.size.height / 2.0, bounds.size.width / 2.0);
// Set the center point of the view to the center point of the window's content area.
self.view.center = center;
// Rotate the view 90 degrees around its new center point.
transform = CGAffineTransformRotate(transform, (M_PI / 2.0));
self.view.transform = transform;
}
}
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}
-(void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning]; // Releases the view if it doesn't have a superview
}
@end
[/tt]
M'enfin c'est pas très grave, merci quand même