Frage

Ich habe bei jeder Frage sah so weit und keine scheinen tatsächlich diese Frage zu beantworten.

habe ich eine UITabBarController und fügte einige View-Controller zu. Die meisten der Ansichten werden im Portrait gesehen, aber man sollte in der Landschaft sehen. Ich will nicht das Beschleunigungsmesser verwenden oder erkennen, wenn der Benutzer das Gerät dreht, ich möchte nur im Querformat die Ansicht anzuzeigen, wenn sie diese Ansicht von dem Registerkarte unten wählen.

Ich mag, dass die regelmäßigen Animationen auftreten, wie die Lasche herausfallen, wobei die Ansicht drehen, etc., wenn sie das Element wählen, und das Gegenteil passieren, wenn sie eine andere Ansicht wählen.

Gibt es nicht eine integrierte Eigenschaft oder eine Methode, das System zu sagen, welche Orientierung wie die Ansicht angezeigt werden?

Überschreiben der shouldautorotate ... Methode macht nicht so weit wie ich sagen kann.

Die Art der Antwort würde ich mich nicht schätzen ist „RTFM“, weil ich schon habe, und jeder, der für das iPhone entwickelt hat, so weiß weit, dass es sehr wenig nützlich M bis F-ing R.

War es hilfreich?

Lösung

Ein Post auf einem Forum, die helfen könnten. Kurze Antwort ist, müssen Sie manuell Ihre Ansicht oder Controller drehen, sobald die Ansicht gezogen wurde, in der viewWillAppear: Verfahren

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

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

Andere Tipps

Hier ist, was ich tue dies zu tun:

Zuerst habe dies am Anfang der Datei definieren, direkt unter #imports:

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

Sie dann im 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];

Überschreiben Sie die Orientierungsmethode in Ihrem Controller-Klasse und zwingen sie zu Landschaft wie folgt aus:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{
    // Overriden to allow any orientation.
    return UIInterfaceOrientationIsLandscape(interfaceOrientation);
}

Einfach und effizient!

ShouldAutorotateToInterfaceOrientation nur funktionieren, wenn alle die Ansicht in dem TabBarController oder all View-Controller in der Navigation bei einer Drehung zustimmen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top