0 votes

Affichage incorrectement positionné lorsqu'il est réglé en mode paysage

Mon application iPhone est basée sur la navigation et contient beaucoup de vues en mode portrait et une seule vue en mode paysage pour visualiser les images. Je voudrais donc forcer cette vue en mode paysage à basculer automatiquement en mode paysage même si l'appareil est en mode portrait.

Voici ce que j'ai fait dans le contrôleur de cette vue :

// Remplacer pour permettre les orientations autres que l'orientation portrait par défaut.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Retourner YES pour les orientations supportées
    return (interfaceOrientation == UIInterfaceOrientationLandscapeRight); 
}

- (void)viewWillAppear:(BOOL)animated
{
 [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent animated:YES];
 [self.navigationController.navigationBar setBarStyle:UIBarStyleBlackTranslucent];

 AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

 _originalTransform = [[appDelegate navigationController].view transform];
 _originalBounds = [[appDelegate navigationController].view bounds];
 _originalCenter = [[appDelegate navigationController].view center];

 CGAffineTransform landscapeTransform = CGAffineTransformMakeRotation(degreesToRadian(90));
 landscapeTransform = CGAffineTransformTranslate (landscapeTransform, +80.0, +100.0);

 [[appDelegate navigationController].view setTransform:landscapeTransform];

 [appDelegate navigationController].view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
 [appDelegate navigationController].view.bounds  = CGRectMake(0.0, 0.0, 480.0, 320.0);
 [appDelegate navigationController].view.center  = CGPointMake (240.0, 160.0);

 [UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeRight;
 }
}

- (void)viewWillDisappear:(BOOL)animated
{ 
 [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault animated:YES];
 [self.navigationController.navigationBar setBarStyle:UIBarStyleDefault];

 AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
 [[appDelegate navigationController].view setTransform:_originalTransform];
 [[appDelegate navigationController].view setBounds:_originalBounds];
 [[appDelegate navigationController].view setCenter:_originalCenter];

 [UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationPortrait; 
}

Maintenant j'ai cette vue toujours affichée en mode paysage. Mais il y a un problème. Cette vue est positionnée incorrectement comme le montre cette capture d'écran.

J'ai essayé de définir manuellement le cadre après la rotation mais cela n'a pas aidé. De plus, je n'ai pas trouvé de guide complet sur la façon de définir une vue en mode paysage uniquement. S'il vous plaît aidez-moi avec ce problème.

0voto

Epsilon Prime Points 2677

Découvrez le post de ce gars. Fondamentalement, vous devez vous transformer autour du centre de la fenêtre. On dirait que vous devez également faire pivoter la barre d'état.

Une autre méthode consisterait à utiliser UIDevice setDeviceOrientation, mais c'est une API privée et donc pas une bonne solution.

0voto

Drew C Points 2546

Essayez d'utiliser cette méthode après avoir appliqué la transformation :

[self.view sizeToFit];

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X