web-dev-qa-db-ja.com

プログラムでデバイス(UI)の向きを設定する方法は?

画面上のすべてのもの(UI)を横から左または右に、またはその逆に回転できるようにします。

これを行うにはどうすればよいですか?これはプライベートですか?

そんなこと知ってる

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

uIの向きを指定できますが、一度に1つだけを強制する方法はありますか?

乾杯

23
Sam Jarman

このメソッドは、インターフェイスが指定された回転に自動的に回転する必要があるかどうかを判断するために呼び出されます(つまり、手動で行うのではなく、UIKitにハードワークを行わせます)。

したがって、アプリをランドスケープでのみ動作させたい場合は、次のようにしてそのメソッドの本体を実装します。

return UIInterfaceOrientationIsLandscape(interfaceOrientation);

UIをすべての方向に自動回転させる場合は、return YES;

それはあなたが求めていたものですか?

16
tobyc

IOSで[[UIDevice currentDevice] setDeviceOrientation:UIDeviceOrientationSomeOrientation]メソッドはありません。ただし、ステータスバーを使用してビューを回転させることができます。

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

私はこれで成功しました:

 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

-shouldAutorotateToInterfaceOrientation:を実装して1つの方向のみをサポートするモーダルView Controllerを提示すると、インターフェイス全体が自動的に強制されます。そうでなければ、プログラムで方向を変更する方法はないと思います。

また、この簡単な方法は機能します:

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

帰ってきた:

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

In Swiftで向きを縦に変更するには:

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

参照: https://stackoverflow.com/a/24259601

3
Cristian Radu

これは、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

これはアイドル状態のソリューションではありませんが、私にとってはうまく機能します。

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

関連するスレッドで推奨shouldAutorotateToInterfaceOrientationは非推奨です。新しいアプリは、Appleの IViewController Class Reference で説明されている次のメソッドを、それら自体が非推奨になるまで活用する必要があります。

  • shouldAutorotate
  • preferredInterfaceOrientationForPresentation;そして
  • attemptRotationToDeviceOrientation

私が理解していることから、最後とは異なる方向モードにロックする(つまり、優先する)必要があるビューに異なるView Controllerを使用するのが最善です。

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