相信大部分開發(fā)者都知道獲取當(dāng)前屏幕方向的方法有很多,但是基本上想獲取到都有一定的限制條件,所以比較郁悶,經(jīng)過(guò)作者的測(cè)試目前采用重力感覺(jué)來(lái)獲取是最準(zhǔn)確的,當(dāng)然可能有其他辦法才菠,我沒(méi)發(fā)現(xiàn),如果您有什么好的方法麻煩在下面給我留言謝謝
話不多說(shuō),直接上代碼
@interface GravityInduction ()
{
NSTimeInterval updateInterval;
}
@property (nonatomic,strong) CMMotionManager *mManager;
@end
@implementation GravityInduction
- (CMMotionManager *)mManager
{
if (!_mManager) {
updateInterval = 1.0/15.0;
_mManager = [[CMMotionManager alloc] init];
}
return _mManager;
}
- (void)startUpdateAccelerometerResult:(void (^)(NSInteger))result
{
if ([self.mManager isAccelerometerAvailable] == YES) {
//回調(diào)會(huì)一直調(diào)用,建議獲取到就調(diào)用下面的停止方法高蜂,需要再重新開始,當(dāng)然如果需求是實(shí)時(shí)不間斷的話可以等離開頁(yè)面之后再stop
[self.mManager setAccelerometerUpdateInterval:updateInterval];
[self.mManager startAccelerometerUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:^(CMAccelerometerData *accelerometerData, NSError *error)
{
double x = accelerometerData.acceleration.x;
double y = accelerometerData.acceleration.y;
if (fabs(y) >= fabs(x))
{
if (y >= 0){
//Down
}
else{
//Portrait
}
}
else
{
if (x >= 0){
//Right
}
else{
//Left
}
}
}];
}
}
- (void)stopUpdate
{
if ([self.mManager isAccelerometerActive] == YES)
{
[self.mManager stopAccelerometerUpdates];
}
}
- (void)dealloc
{
_mManager = nil;
}```
>如果覺(jué)得我的文章對(duì)您有用罕容,請(qǐng)隨意打賞备恤。您的支持將鼓勵(lì)我繼續(xù)創(chuàng)作!