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
};
UIInterfaceOrientationPortrait = UIDeviceOrientationPortrait, //
UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown,
UIInterfaceOrientationLandscapeLeft = UIDeviceOrientationLandscapeRight,
UIInterfaceOrientationLandscapeRight = UIDeviceOrientationLandscapeLeft
};
一个注意的地方就是:
UIInterfaceOrientation的横屏的左边和右边跟UIDeviceOrientation刚好相反 (特酷吧未考察正确性)。
二
,IOS获取设备当前方向
返回UIDeviceOrientation值,获取当前设备的方向,可以在程序的任何地方访问,但是请注意,UIDeviceOrientation并不总是UIInterfaceOrientation。
主要由以下三种方式:
(3)[[UIDevice currentDevice] orientation]
(1)self.interfaceOrientation
返回UIInterfaceOrientation值,为UIViewController的属性,该方法获取当前UIViewController的界面方向,且为只读;
(2)[[UIApplication sharedApplication] statusBarOrientation]
返回UIInterfaceOrientation值,返回当前程序(也就是程序状态栏的)方向,可以在程序的任何地方访问,根据网络上的资料显示,它是最有效的获取当前真实界方向的方法.
返回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...