2 Stimmen

Umschalten der Ansicht je nach Geräteausrichtung

Ich versuche Folgendes: Wenn ich das Gerät in meiner Home's Application in den Querformatmodus versetze, wird eine Hilfeansicht angezeigt. Bisher scheint es richtig zu funktionieren, aber wenn ich eine Taste drücke, um zu einer anderen Ansicht zu wechseln, dann zum Home zurückkehre und das Gerät ins Querformat stelle... sehe ich alles auf falsche Weise.

Hier sind zwei Bilder, um das Problem zu erklären:

falsche Landschaft falsches Porträt

Hier ist mein 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

Ich hoffe, Sie können mir helfen

0voto

tipycalFlow Punkte 7554

Sie können zusätzliche Prüfungen für die aktuelle Orientierung in viewDidAppear und ändern Sie die Ansichten entsprechend. Sie können die aktuelle Ausrichtung des Geräts jederzeit als

[[UIDevice currentDevice] orientation];

EDIT : Versuchen Sie es, indem Sie diese Methode zu Ihrer Klasse hinzufügen:

-(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 Versuchen Sie, die Ausrichtung manuell als :

- (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;    
   }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X