it-swarm.com.de

Wie kann ich die Ausrichtung des Geräts (UI) programmgesteuert einstellen?

Möchte alles auf dem Bildschirm (UI) von Landschaft nach links oder rechts drehen oder umgekehrt. 

Wie mache ich das? Ist das privat? 

Ich weiß das 

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {}

können Sie sagen, welche Ausrichtungen die Benutzeroberfläche sein kann, aber gibt es eine Möglichkeit, jeweils nur eine zu erzwingen? 

Prost

23
Sam Jarman

Diese Methode wird aufgerufen, um zu bestimmen, ob Ihre Benutzeroberfläche automatisch auf eine bestimmte Rotation gedreht werden soll (d. H. Sie lassen UIKit die harte Arbeit erledigen, anstatt Sie manuell zu tun).

Wenn Sie also möchten, dass Ihre App nur in Landschaft arbeitet, würden Sie den Körper dieser Methode folgendermaßen implementieren:

return UIInterfaceOrientationIsLandscape(interfaceOrientation);

Wenn Sie möchten, dass Ihre Benutzeroberfläche automatisch in alle Ausrichtungen gedreht wird, können Sie einfach return YES;

Haben Sie das gefragt?

16
tobyc

In iOS [[UIDevice currentDevice] setDeviceOrientation:UIDeviceOrientationSomeOrientation] fehlt die Methode. Wir können jedoch eine Ansicht mit der Statusleiste drehen:

- (void)showAlbum {
    // check current orientation
    if ([[UIApplication sharedApplication] statusBarOrientation] != UIInterfaceOrientationLandscapeLeft) {
        // no, the orientation is wrong, we must rotate the UI
        self.navigationController.view.userInteractionEnabled = NO;
        [UIView beginAnimations:@"newAlbum" context:NULL];
        [UIView setAnimationDelegate:self];
        // when rotation is done, we can add new views, because UI orientation is OK
        [UIView setAnimationDidStopSelector:@selector(addAlbum)];
        // setup status bar
        [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft  animated:NO];
        // rotate main view, in this sample the view of navigation controller is the root view in main window
        [self.navigationController.view setTransform: CGAffineTransformMakeRotation(M_PI / 2)];
        // set size of view
        [self.navigationController.view setFrame:CGRectMake(0, 0, 748, 1024)];
        [UIView commitAnimations];
    } else {
        [self addAlbum];
    }

}
24
UIBuilder

Ich hatte Erfolg damit:

 if (self.interfaceOrientation != UIInterfaceOrientationPortrait) {
    // http://stackoverflow.com/questions/181780/is-there-a-documented-way-to-set-the-iphone-orientation
    // http://openradar.appspot.com/radar?id=697
    // [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationPortrait]; // Using the following code to get around Apple's static analysis...
    [[UIDevice currentDevice] performSelector:NSSelectorFromString(@"setOrientation:") withObject:(id)UIInterfaceOrientationPortrait];
}
18
Chris

Wenn Sie einen modalen View-Controller vorlegen, der -shouldAutorotateToInterfaceOrientation: so implementiert, dass nur eine Ausrichtung unterstützt wird, wird die gesamte Schnittstelle automatisch in die Ansicht hineingezogen. Ich glaube nicht, dass es eine Möglichkeit gibt, die Orientierung programmgesteuert zu ändern.

Auch dieser einfache Weg funktioniert:

[[UIApplication sharedApplication] setStatusBarHidden:YES];
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight];

und zurück:

[[UIApplication sharedApplication] setStatusBarHidden:NO];
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait];
3
Pavel

In Swift, um die Ausrichtung in Hochformat zu ändern:

UIDevice.currentDevice().setValue(UIInterfaceOrientation.Portrait.rawValue, forKey: "orientation")

Siehe: https://stackoverflow.com/a/24259601

3
Cristian Radu

Dies wurde angesprochen von: Guntis Treulands https://stackoverflow.com/a/10146270/894671

//-----------------------------------
// FORCE PORTRAIT CODE
//-----------------------------------
[[UIApplication sharedApplication] setStatusBarOrientation:UIDeviceOrientationPortrait animated:NO];
//present/dismiss viewcontroller in order to activate rotating.
UIViewController *mVC = [[UIViewController alloc] init];
[self presentModalViewController:mVC animated:NO];
[self dismissModalViewControllerAnimated:NO];
2
to0nice4eva

Obwohl dies keine müßige Lösung ist, funktioniert es gut für mich.

- (void)viewDidLoad
{
   self.view.transform = CGAffineTransformIdentity;
   self.view.transform = CGAffineTransformMakeRotation((M_PI * (90) / 180.0)); 
   self.view.bounds = CGRectMake(0.0, 0.0, 480, 320);
}
0
byJeevan

Wie in einem verwandten Thread vorgeschlagenshouldAutorotateToInterfaceOrientation ist veraltet. Neuere Apps sollten die folgenden Methoden nutzen, wie in Apples UIViewController-Klassenreferenz beschrieben beschrieben, bis sie selbst veraltet sind:

  • shouldAutorotate,
  • preferredInterfaceOrientationForPresentation; und
  • attemptRotationToDeviceOrientation.

Soweit ich es verstehe, ist es am besten, unterschiedliche Ansichtskontroller für Ansichten zu verwenden, die einen bevorzugten Orientierungsmodus benötigen (d. H. Einen bevorzugten Orientierungsmodus haben).

0
Josh Habdas
if ([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]) {
        objc_msgSend([UIDevice currentDevice], @selector(setOrientation:),    UIInterfaceOrientationLandscapeLeft );
    }
0
hariszaman