我开发了iOS应用程序并在iOS6设备上进行了测试。在测试时,我意识到我的应用程序没有按预期响应方向更改。
这是我的代码:
// Autorotation (iOS >= 6.0)
- (BOOL) shouldAutorotate
{
return NO;
}
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskAll;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return UIInterfaceOrientationMaskPortrait;
}
准确地说,我想知道iOS中的方向更改会调用哪些方法。
答案 0 :(得分:53)
你可以尝试这个,可以帮助你:
How to change the device orientation programmatically in iOS 6
OR
<强>目标C:强>
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]
<强>夫特:强>
if UIDevice.current.orientation.isLandscape {
// Landscape mode
} else {
// Portrait mode
}
答案 1 :(得分:36)
你可以尝试这个,这可以解决你的问题。
UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
请参阅以下App extension
链接
Get device current orientation (App Extension)
答案 2 :(得分:6)
也许很愚蠢,但它正在运行(仅在ViewController中):
if (self.view.frame.size.width > self.view.frame.size.height) {
NSLog(@"Hello Landscape");
}
答案 3 :(得分:5)
@property (nonatomic) UIDeviceOrientation m_CurrentOrientation ;
/ *您需要在ViewDidload或ViewWillAppear * /
中声明这些代码- (void)viewDidLoad
{
[super viewDidLoad];
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(deviceOrientationDidChange:) name: UIDeviceOrientationDidChangeNotification object: nil];
}
/ *现在我们的设备会在我们更改设备方向时发出通知,因此您可以使用当前方向控制代码或程序* /
- (void)deviceOrientationDidChange:(NSNotification *)notification
{
//Obtaining the current device orientation
/* Where self.m_CurrentOrientation is member variable in my class of type UIDeviceOrientation */
self.m_CurrentOrientation = [[UIDevice currentDevice] orientation];
// Do your Code using the current Orienation
}
答案 4 :(得分:2)
按照UIDevice上的文档。
您需要致电
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
然后每次更改方向时,您将收到UIDeviceOrientationDidChangeNotification。
答案 5 :(得分:2)
This tutorial简要概述了如何使用UIDeviceOrientationDidChangeNotification
处理设备轮换。它可以帮助您了解如何在设备方向更改时使用UIDeviceOrientationDidChangeNotification
进行通知。
答案 6 :(得分:1)
UIDevice.current.orientation.isLandscape
接受的答案读取上述设备的方向,可以报告与视图控制器的方向不同,特别是如果您的设备保持在几乎水平的位置。
要明确了解视图控制器的方向,您可以使用其interfaceOrientation
属性,该属性自iOS 8.0以来已弃用但仍能正确报告。
答案 7 :(得分:0)
在ViewController中,您可以使用didRotateFromInterfaceOrientation:
方法检测设备何时旋转,然后在每个方向执行您需要的任何操作。
示例:
#pragma mark - Rotation
-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
switch (orientation) {
case 1:
case 2:
NSLog(@"portrait");
// your code for portrait...
break;
case 3:
case 4:
NSLog(@"landscape");
// your code for landscape...
break;
default:
NSLog(@"other");
// your code for face down or face up...
break;
}
}