是否有逻辑来检测用户是否在水平面上将电话从电池侧翻转到屏幕侧,反之亦然?我试过获取原始值来确定设备是否处于两个面上的水平位置但是如何检测整个运动,有人可能指向正确的方向。
答案 0 :(得分:4)
如果您查看UIDevice class reference,您会看到方向枚举。其中两个值为UIDeviceOrientationFaceDown
和UIDeviceOrientationFaceUp
。话虽这么说,您所要做的就是将观察者注册到UIDeviceOrientationDidChangeNotification
通知,然后在通话时您可以检查设备的当前方向并相应地处理。
[[NSNotificationCenter defaultCenter] addObserverForName:UIDeviceOrientationDidChangeNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) {
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
if (orientation == UIDeviceOrientationFaceDown) {
// device facing down
}else if (orientation == UIDeviceOrientationFaceUp) {
// device facing up
}else{
// facing some other direction
}
}];
请务必使用以下内容开始生成您需要观察的设备通知。
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
如果您想获得有关设备方向的更多具体信息,您需要使用Core Motion框架直接获取陀螺仪数据。这样,您就可以跟踪设备在3D空间中面向的确切当前方向。
_motionManager = [CMMotionManager new];
NSOperationQueue *queue = [NSOperationQueue new];
[_motionManager setGyroUpdateInterval:1.0/20.0];
[_motionManager startGyroUpdatesToQueue:queue withHandler:^(CMGyroData *gyroData, NSError *error) {
NSLog(@"%@",gyroData);
}];