UIDeviceOrientation枚举值:
UIDeviceOrientationUnknown,
UIDeviceOrientationPortrait, // 竖向-home键在下
UIDeviceOrientationPortraitUpsideDown, // 竖向-home键在上
UIDeviceOrientationLandscapeLeft, // 横向-home键在左
UIDeviceOrientationFaceDown // 横向-home键在右
UIDeviceOrientationFaceUp, // 平放-朝上
UIDeviceOrientationFaceDown // 平放-朝下
- 1 主动获取朝向
//主动生成设备朝向的通知 使用时注意该方法有延迟,调用后立即获取朝向无法正常获取
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
//获取设备朝向 必须生成设备朝向的通知
NSLog(@"%zd", [UIDevice currentDevice].orientation);
});
- 2 监听朝向变化
//监听朝向变化 通过监听通知来实现 UIDeviceOrientationDidChangeNotification 当朝向发生变化后调用监听通知的响应方法,一旦开启监听,默认就会调用一次响应方法
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationDidChange) name:UIDeviceOrientationDidChangeNotification object:nil];
监听设备朝向变化时调用的方法,只要设备朝向一发生改变,就能实时获取朝向了
//朝向发生变化后调用
- (void)orientationDidChange{
//监听横竖屏变化 根据横竖屏情况设置不同的主视图宽度
if (UIDeviceOrientationIsPortrait([UIDevice currentDevice].orientation)) { //竖向
//设置主视图的最大宽度
self.maximumPrimaryColumnWidth = 60;
} else { //横向
//设置主视图的最大宽度
self.maximumPrimaryColumnWidth = 200;
}
}
示例代码:
#import "JSSplitViewController.h"
@interface JSSplitViewController ()
@end
@implementation JSSplitViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self prepareSplitViewController];
}
// 设置SplitViewController
- (void)prepareSplitViewController {
// 设置SplitViewController显示模式:主视图和明细视图始终显示
self.preferredDisplayMode = UISplitViewControllerDisplayModeAllVisible;
// 监听设备朝向变化
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationDidChangeNotification) name:UIDeviceOrientationDidChangeNotification object:nil];
}
// 监听设备朝向变化时调用的方法
- (void)orientationDidChangeNotification{
// 根据横竖屏变化,设置不同的主视图宽度
if (UIDeviceOrientationIsPortrait([UIDevice currentDevice].orientation)) { // 竖屏
self.maximumPrimaryColumnWidth = 60;
}else { // 横向
self.maximumPrimaryColumnWidth = 200;
}
}
@end
当设备旋转时,竖屏下,让主视图的宽度为60;横屏下,主视图宽度为200
横屏:
horizontal.png竖屏:
vertical.png判断横竖屏时,使用了系统提供的一个内联函数,通过这个函数,直接帮我们完成了朝向的判断,这样就简单实现了判断,免去了自己判断
static inline BOOL UIDeviceOrientationIsPortrait(UIDeviceOrientation orientation) __TVOS_PROHIBITED {
return ((orientation) == UIDeviceOrientationPortrait || (orientation) == UIDeviceOrientationPortraitUpsideDown);
}
static inline BOOL UIDeviceOrientationIsLandscape(UIDeviceOrientation orientation) __TVOS_PROHIBITED {
return ((orientation) == UIDeviceOrientationLandscapeLeft || (orientation) == UIDeviceOrientationLandscapeRight);
}
网友评论