2010-01-18 8 views
0

Mon application iPhone est basée sur la navigation et contient de nombreuses vues en mode portrait uniquement et une seule vue en mode paysage pour la visualisation des images. Donc, je voudrais forcer cette vue en mode paysage uniquement à pivoter automatiquement en mode paysage même si l'appareil est positionné en mode portrait.Affichage mal positionné en mode paysage

Voici donc ce que I'w fait dans le contrôleur de ce point de vue:

// Override to allow orientations other than the default portrait orientation. 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    // Return YES for supported orientations 
    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 toujours ce point de vue affichée en mode lanscape. Mais il y a un problème. Cette vue est mal positionnée comme illustré dans this screenshot.

J'ai essayé de régler 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 manière de définir une vue comme paysage uniquement. S'il vous plaît aidez-moi avec ce problème.

Répondre

0

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

Une méthode différente serait d'utiliser UIDevice setDeviceOrientation, mais c'est une API privée et donc pas une excellente solution.

+0

Merci, j'ai essayé beaucoup de solutions de contournement qui m'a aidé. Mais il y a toujours un problème avec le dialogue modal de portrait qui est montré au-dessus de ce dialogue de paysage. Donc après de nombreuses heures j'ai décidé de laisser le dialogue initial être portrait et paysage. Cela a réglé tous mes problèmes. La faute à Apple. – MrZoidberg

0

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

[self.view sizeToFit];