IOS 屏幕旋转控制详解-特酷吧

typedef NS_ENUM(NSInteger, UIDeviceOrientation) {
    UIDeviceOrientationUnknown,
    UIDeviceOrientationPortrait,                    // Device oriented vertically, home button on the bottom
    UIDeviceOrientationPortraitUpsideDown,      // Device oriented vertically, home button on the top
    UIDeviceOrientationLandscapeLeft,           // Device oriented horizontally, home button on the right
    UIDeviceOrientationLandscapeRight,           // Device oriented horizontally, home button on the left
    UIDeviceOrientationFaceUp,                        // Device oriented flat, face up
    UIDeviceOrientationFaceDown                    // Device oriented flat, face down
};
UIInterfaceOrientation为应用(或者是界面的方向),可读可写,取值如下:
typedef NS_ENUM(NSInteger, UIInterfaceOrientation) {
    UIInterfaceOrientationPortrait           = UIDeviceOrientationPortrait, //
    UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown,
    UIInterfaceOrientationLandscapeLeft      = UIDeviceOrientationLandscapeRight,
    UIInterfaceOrientationLandscapeRight     = UIDeviceOrientationLandscapeLeft
};
一个注意的地方就是:  UIInterfaceOrientation的横屏的左边和右边跟UIDeviceOrientation刚好相反 (特酷吧未考察正确性)。
  
二  ,IOS获取设备当前方向
主要由以下三种方式:
(1)self.interfaceOrientation
返回UIInterfaceOrientation值,为UIViewController的属性,该方法获取当前UIViewController的界面方向,且为只读;
(2)[[UIApplication sharedApplication] statusBarOrientation]
返回UIInterfaceOrientation值,返回当前程序(也就是程序状态栏的)方向,可以在程序的任何地方访问,根据网络上的资料显示,它是最有效的获取当前真实界方向的方法.
(3)[[UIDevice currentDevice] orientation]
返回UIDeviceOrientation值,获取当前设备的方向,可以在程序的任何地方访问,但是请注意,UIDeviceOrientation并不总是UIInterfaceOrientation。

三,  如何监控设备方向的变化?
如果需要获取设备方向变化的消息,需要注册UIDeviceOrientationDidChangeNotification通知。
在注册通知时,需要注意:应该先调用UIDevice的beginGeneratingDeviceOrientationNotifications方法
 [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deviceOrientationDidChange:) name:UIDeviceOrientationDidChangeNotification object:nil];
在结束时需要移除改通知消息
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil];
[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];
//实现deviceOrientationDidChange方法即可
-(void) deviceOrientationDidChange:( NSNotification *) notification
{
  if([UIDevice currentDevice].orientation!=UIDeviceOrientationUnknown){}
}
  
四,  控制应用屏幕旋转
因为IOS6之后,控制方法做了变动,所以这部分需要分别处理:
//for iOS4,iOS5- 重写UIViewController的方法
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation==UIInterfaceOrientationMaskLandscape);//不需要旋转屏幕直接return NO即可。
}

 
//for iOS6 - 也是UIViewController的方法
-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskLandscape;//支持旋转的方向
}
 
- (BOOL)shouldAutorotate
{
    return YES;//禁用旋转返回NO
}
注意: (针对IOS6以后)如果需要支持多方向,还应该在XXX.plist中新增Supported interface orientations属性-添加应用支持的方向,不然即使supportedInterfaceOrientations设定了方向,而在plist文件中没有配置该方向,也是不能起作用的。(IOS6之前不需要配置plist的Supported interface orientations属性)。

原网页地址:  http://www.tekuba.net/program/306/#184595-youdao-1...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值