如何识别ios设备的方向

最近在做一个项目,需要识别到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]	
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值