2

I'm trying to do this: in my Home's Application, if I put the device in landscape mode I'll show a help view. So far it seems to works properly but if I push a button to go to another view,then I come back to the Home and put the device in landscape...I see everything in a wrong way.

Here are two images to try to explain the problem:

wrong landscape wrong portrait

Here's my ViewController.m code:

#import "ViewController.h"

@implementation ViewController
@synthesize portraitView, landscapeView;

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle

- (void)viewDidLoad
{
[super viewDidLoad];
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self      
selector:@selector(orientationChanged:)name:@"UIDeviceOrientationDidChangeNotification"   
object:nil ];


// Do any additional setup after loading the view, typically from a nib.
}


-(void)orientationChanged:(NSNotification *)object{
UIDeviceOrientation deviceOrientation = [[object object] orientation];

    if (deviceOrientation == UIInterfaceOrientationPortrait )
{
    self.view = self.portraitView;        
}
else if (deviceOrientation == UIInterfaceOrientationLandscapeLeft || deviceOrientation ==    
UIInterfaceOrientationLandscapeRight)
{
    self.view = self.landscapeView;    
}
}

- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}

- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
}

- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
}

- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
}

- (void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
}


- (BOOL)shouldAutorotateToInterfaceOrientation:   
(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
} else {
    return YES;
}  
}

@end

I hope you can help me

Enzoses
  • 115
  • 14

1 Answers1

0

You can put additional checks for current orientation in viewDidAppear and change views accordingly. You can always get the device's current orientation as

[[UIDevice currentDevice] orientation];

EDIT: Try by adding this method to your class:

-(void)viewDidAppear{
UIDeviceOrientation deviceOrientation = [[UIDevice currentDevice] orientation];

 if (deviceOrientation == UIInterfaceOrientationPortrait )
 {
   self.view = self.portraitView;        
 }
 else if (deviceOrientation == UIInterfaceOrientationLandscapeLeft || deviceOrientation ==    
 UIInterfaceOrientationLandscapeRight)
 {
 self.view = self.landscapeView;    
 }
}

EDIT2- Try manually setting orientation as :

- (void)viewDidAppear:(BOOL)animated
{
  [super viewDidAppear:animated];
  UIDeviceOrientation deviceOrientation = [[UIDevice currentDevice] orientation];

  [[UIDevice currentDevice] setOrientation:deviceOrientation];
  if (deviceOrientation == UIInterfaceOrientationPortrait )
   {
      self.view = self.portraitView;        
   }
  else if (deviceOrientation == UIInterfaceOrientationLandscapeLeft || deviceOrientation ==    
 UIInterfaceOrientationLandscapeRight)
   {
      self.view = self.landscapeView;    
   }
}
tipycalFlow
  • 7,594
  • 4
  • 34
  • 45