- yaw角度:表示手机顶部转过的夹角。当手机绕着Z轴旋转时,该角度值发生改变。例如,当该角度为0时,表名手机并未发生旋转;该角度π/2时,代表手机逆时针转过90°;
- pitch角度:表示手机顶部或尾部翘起的角度。当手机绕着X轴倾斜时,该角度值发生变化。该角度的取值范围是-π~π。假设将手机屏幕朝上水平放在桌子上,如果桌子是完全水平的,giant角度值应该是0。假如从手机顶部开始抬起,直到将手机沿X轴旋转180°(屏幕向下水平放在桌子上),在这个旋转过程中,该角度值会从0变化到π。也就是说没从手机顶部抬起,giant角度值会逐渐增大,直到等于π;如果从手机底部开始抬起,直到将手机沿X轴旋转180°(屏幕向下水平放在桌子上),该角度值会从0变化到-π。也就说说没从手机底部抬起,该角度值会水平放在桌面上,直到等于-π;
- roll角度:表示手机左侧或右侧翘起的角度。当手机绕着Y轴倾斜时,该角度值发生变化。该角度的取值范围是-π/2~π/2.假设将手机屏幕朝上水平放在桌子上,如果桌子是完全水平的,该角度值应该是0。加入将手机左侧逐渐抬起,直到将手机沿Y轴旋转90°(手机与桌面垂直),在这个旋转过程中,该角度值会从0变化到π/2.也就是说,从手机左侧抬起时,该角度值会逐渐增大,直到等于π/2;如果从手机右侧开始抬起,直到将手机沿Y轴旋转90°(手机与桌面垂直),该角度值会从0变化到-π/2。也就是说,从手机右侧抬起时,该角度值会逐渐减少,直到等于-π/2;
例如:使用CMMotionManager感知设备移动
- (void)viewDidLoad {
[super viewDidLoad];
//创建CMMotionManager对象
self.motionManager = [[CMMotionManager alloc]init];
//如果可以获取设备的动作信息
if (self.motionManager.deviceMotionAvailable) {
//开始更新设备的动作信息
[self.motionManager startDeviceMotionUpdates];
}else{
NSLog(@"该设备的deviceMotion不可用");
}
}
- (void)updateDisplay {
if (self.motionManager.deviceMotionAvailable) {
//获取设备移动信息
CMDeviceMotion* deviceMotion = self.motionManager.deviceMotion;
NSMutableString* str = [NSMutableString stringWithString:@"deviceMotion信息为:\n"];
[str appendFormat:@"---attitude信息---\n"];
[str appendFormat:@"attitude的yaw:%+.2f\n",deviceMotion.attitude.yaw];
[str appendFormat:@"attitude的pitch:%+.2f\n" , deviceMotion.attitude.pitch];
[str appendFormat:@"attitude的roll:%+.2f\n" , deviceMotion.attitude.roll];
[str appendString:@"---rotationRate信息---\n"];
[str appendFormat:@"rotationRate的X:%+.2f\n", deviceMotion.rotationRate.x];
[str appendFormat:@"rotationRate的Y:%+.2f\n" , deviceMotion.rotationRate.y];
[str appendFormat:@"rotationRate的Z:%+.2f\n" , deviceMotion.rotationRate.z];
[str appendString:@"---gravity信息---\n"];
[str appendFormat:@"gravity的X:%+.2f\n", deviceMotion.gravity.x];
[str appendFormat:@"gravity的Y:%+.2f\n" , deviceMotion.gravity.y];
[str appendFormat:@"gravity的Z:%+.2f\n" , deviceMotion.gravity.z];
[str appendString:@"---magneticField信息---\n"];
[str appendFormat:@"magneticField的精度:%d\n",
deviceMotion.magneticField.accuracy];
[str appendFormat:@"magneticField的X:%+.2f\n",
deviceMotion.magneticField.field.x];
[str appendFormat:@"magneticField的Y:%+.2f\n" ,
deviceMotion.magneticField.field.y];
[str appendFormat:@"magneticField的Z:%+.2f\n" ,
deviceMotion.magneticField.field.z];
self.showField.text = str;
}
}
实例:水平仪
详情请看代码
三、iOS 7新增的计步器
iOS 7新增的CMStepCounter作为计步器,该计步器可以获取用户携带该设备行走的步数,iOS设备通过内置硬件来手机并存储用户行走的步数。程序通过该类即可获取用户当前行走的步数,也可查询用户行走的历史活动数据。
CMStepCounter提供了isStepCountingAvailable类方法来判断计步器是否可用,在传统的iPhone、iPad设备上,CMStepCounter暂时不可用。
使用CMStepCounter获取实时的计步数据可通过如下方法:
①、