最近在做一个项目,需要识别到ios 设备的6个方向,6个方向如下:
typedef NS_ENUM(NSInteger, UIDeviceOrientation) {
UIDeviceOrientationUnknown,
UIDeviceOrientationPortrait,
UIDeviceOrientationPortraitUpsideDown,
UIDeviceOrientationLandscapeLeft,
UIDeviceOrientationLandscapeRight,
UIDeviceOrientationFaceUp,
UIDeviceOrientationFaceDown
};
通常的做法是监听UIDeviceOrientationDidChangeNotification事件,然后此事件触发的相应的方法调用[[notify object] orientation], 模拟器测试一切ok,但是在设备上却不起作用,后来发现原来是设备的方向被锁定了!如果设备方向被锁定,UIDeviceOrientationDidChangeNotification这个事件是不起作用的,有人说,那使用的时候就建议用户把方向给解锁啊,答应是没有此api可以检测到,同时这种做法也很容易招致用户的反感,既然如此有什么好的方法吗?在网上搜了一轮,发现没有什么好的解决方法,有一篇文章建议使用accelerometer来识别设备方向,不过试了一下,当设备方向为faceup和facedown的时候,它也识别为portrait,也不靠谱
思来想去,我暂时想出了以下方法,即用到计时器,定期调用[[UIDivice currentDivice] orientation]方法即可:
NSTimer *timer = [NSTimer timerWithTimeInterval:0.5 target:self selector:@selector(didRotate:) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:timer forMode: NSDefaultRunLoopMode];
- (void)didRotate:(NSTimer *)timer{
UIDeviceOrientation = [[UIDevice currentDevice] orientation]
}