我已经开发了一个iOS应用程序并测试其iOS6的设备上。 测试时,我意识到,预期我的应用程序没有响应取向变化。
这是我的代码:
// Autorotation (iOS >= 6.0)
- (BOOL) shouldAutorotate
{
return NO;
}
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskAll;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return UIInterfaceOrientationMaskPortrait;
}
准确地说,我想知道,什么方法都要求在iOS的取向的变化。
你可以试试这个,可以帮助你:
如何以编程方式更改设备取向的iOS 6
要么
Objective-C的:
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]
迅速:
if UIDevice.current.orientation.isLandscape {
// Landscape mode
} else {
// Portrait mode
}
你可以试试这个,这解决您的问题。
UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
请参考以下链接, App extension
获取设备当前的方向(应用程序扩展)
也许愚蠢的,但它是工作(仅在视图控制器):
if (self.view.frame.size.width > self.view.frame.size.height) {
NSLog(@"Hello Landscape");
}
@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
}
按照该文件的UIDevice 。
你需要调用
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
然后每次方向改变时,您将收到一个UIDeviceOrientationDidChangeNotification。
本教程提供了如何利用处理设备旋转一个很好的和简单的概述UIDeviceOrientationDidChangeNotification
。 它应该帮助您了解如何使用UIDeviceOrientationDidChangeNotification
通知当设备方向发生了变化。
UIDevice.current.orientation.isLandscape
接受的答案读取设备的如上述的取向,其可不同于视图控制器(一个或多个)的定向被报告,特别是如果设备在几乎水平的位置上。
为了让您的视图控制器的方向明确,你可以用它interfaceOrientation
的性质,因为iOS的8.0它被废弃了,但仍然可以正确地报告。
在您的视图控制器,你可以使用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;
}
}