0

是否有逻辑来检测用户是否将手机从电池侧翻转到屏幕侧,反之亦然?我尝试获取原始值以确定设备是否在两个面上都处于水平位置,但是如何检测整个运动,有人可以指出我正确的方向。

4

1 回答 1

4

如果您查看UIDevice 类参考,您将看到方向枚举。它的两个值是UIDeviceOrientationFaceDownUIDeviceOrientationFaceUp。话虽如此,您所要做的就是注册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);
}];
于 2013-08-29T17:30:24.407 回答