2009-01-10 17 views
9

Okay, ich habe meine normale App im Hochformat. Ich kann meine App zwingen, für einen Blick in das Querformat zu gehen (mit Navigation und Viewcontroller) wie folgt aus:iPhone SDK: Ausrichtung (Querformat und Hochformat)

- (void)viewWillAppear:(BOOL)animated { 
    [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight]; 
} 

Aber dann, als ich in das Hauptmenü zurück (Tableview) geht es zum Porträt Rücken gerade. Ich versuche, diesen Code:

- (void)viewWillAppear:(BOOL)animated { 
    [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationPortrait]; 
} 

Aber das funktioniert nicht ..

Irgendwelche Ideen?

Antwort

9

Sehen Sie sich die Funktion shouldAutorotateToInterfaceOrientation: in der UIViewController-Klasse an. Diese Funktion gibt YES zurück, wenn die Ausrichtung von Ihrer UIView unterstützt wird. Wenn Sie YES nur in die Querformatausrichtung zurückgeben, wird das iPhone automatisch in dieser Ausrichtung angezeigt.

Der folgende Code sollte es tun. Fügen Sie es in den UIViewController ein, der die Ansicht steuert, die Sie in den Querformatmodus versetzen möchten.

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    // Return YES for supported orientations 
    return (interfaceOrientation == UIInterfaceOrientationLandscape); 
} 
0

Sie müssen Ihre Info.plist-Datei bearbeiten, um den UIInterfaceOrientation-Schlüssel mit dem entsprechenden Wert hinzuzufügen (UIInterfaceOrientationLandscapeRight oder UIInterfaceOrientationLandscapeLeft).

+0

Ist das nur Tabelle Hauptbildschirm ein Porträt zurück zu gehen? weil ich will alles portrait, nur eine ansicht landschaft. Ich kann es landschaftlich aber dann wenn ich zurück gehe, muss ich das Telefon drehen, um es zurück zum Portrait zu bekommen. Ich möchte nicht, dass die Nutzer die Ruhelandschaft haben. – Domness

7

dies zur Arbeit zu kommen, habe ich dies den RootViewController:

- (void)viewWillAppear:(BOOL)animated { 
    [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationPortrait]; 

} 

Die jetzt zu funktionieren scheint.

+0

Zählt dies als private API?Ausrichtung wird als eine schreibgeschützte Eigenschaft dokumentiert. – lawrence

+0

Es ist alles in Ordnung über Apple :) – Domness

+0

Diese Zeile kann nur den Simulator drehen. In der Logik können Sie keine Programmierskripte verwenden, um Benutzer dazu zu bringen, ihre iPhones zu drehen. Sie können den Benutzern nur Hinweise geben. – Raptor

3

Hier ist, was ich tue dies zu tun:

ersten, legen diese am Anfang der Datei definieren, direkt unter #imports:

#define degreesToRadian(x) (M_PI * (x)/180.0) 

, dann in der viewWillAppear: Verfahren

[[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO];  
if (self.interfaceOrientation == UIInterfaceOrientationPortrait) { 
    self.view.transform = CGAffineTransformIdentity; 
    self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(90)); 
    self.view.bounds = CGRectMake(0.0, 0.0, 480, 320); 
} 

, wenn Sie das wollen animiert werden, dann kann man das ganze in einem Animationsblock wickeln, etwa so:

[UIView beginAnimations:@"View Flip" context:nil]; 
[UIView setAnimationDuration:1.25]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 

[[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO];  
if (self.interfaceOrientation == UIInterfaceOrientationPortrait) { 
    self.view.transform = CGAffineTransformIdentity; 
    self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(90)); 
    self.view.bounds = CGRectMake(0.0, 0.0, 480, 320); 
} 
[UIView commitAnimations]; 

Dann können Sie in Ihrem Portrait-Modus-Controller das Gegenteil tun - überprüfen Sie, ob es derzeit im Querformat ist, und wenn ja, drehen Sie es zurück zu Portrait.

+0

Sie sind in der Nähe. self.view.frame = CGRectMake (0.0f, 0.0f, 480.0f, 320.0f); self.view.transform = CGAffineTransformMakeRotation (GradToRadian (-90)); self.view.center = CGPointMake (160,0f, 240,0f); wir müssen das Zentrum der Ansicht auf die Mitte des Bildschirms einstellen, und füllen Sie den Bildschirm (ohne die 20px Raum). – Raptor

+0

Wenn Sie die Statusleiste nicht ausblenden möchten, können Sie Folgendes hinzufügen: [[UIApplication sharedApplication] setStatusBarOrientation: UIInterfaceOrientationLandscapeRight]; –

0

Sie können diese private API nicht verwenden.

Es gibt eine Lösung, um dies zu tun: Es ist ein View-Controller zu verwenden und seine Sicht auf das Fenster hinzuzufügen. Dann erzwingen Sie in dieser Steuerung Landschaft in der Methode shouldAutorotate .... Es funktioniert gut, aber stellen Sie sicher, dass es für Ihr Projekt notwendig ist, das zu verwenden, weil es nicht sehr schlau ist, den Benutzer zu zwingen, sein iPhone zu drehen. Übrigens, hier ist ein Beispielcode, wenn Sie ihn brauchen.

http://www.geckogeek.fr/iphone-forcer-le-mode-landscape-ou-portrait-en-cours-dexecution.html

Verwandte Themen