我需要检测陀螺仪/加速度计被激活的一定量程度,以便检测设备是否在运动。我对核心动态(Core Motion)一无所知。
也许有人可以向我指引一份初学者教程之类的东西。
提前感谢您的帮助。
我需要检测陀螺仪/加速度计被激活的一定量程度,以便检测设备是否在运动。我对核心动态(Core Motion)一无所知。
也许有人可以向我指引一份初学者教程之类的东西。
提前感谢您的帮助。
我认为你需要使用Core Motion。好消息是,对于你的问题域来说,使用它并不那么难。开始阅读事件处理指南,特别是处理已处理的设备动作数据部分。如果你只对知道轻微动作是否发生感兴趣,就像你所说的那样,可以省略旋转处理,并将信号处理集中在CMDeviceMotion.userAcceleration上。这是因为每次旋转也会产生加速度计信号。
按照CMDeviceMotionHandler中描述的方式创建一个,然后调用startDeviceMotionUpdatesToQueue:withHandler:。 你的CMDeviceMotionHandler应该执行以下操作:
float accelerationThreshold = 0.2; // or whatever is appropriate - play around with different values
CMAcceleration userAcceleration = deviceMotion.userAcceleration;
if (fabs(userAcceleration.x) > accelerationThreshold)
|| fabs(userAcceleration.y) > accelerationThreshold
|| fabs(userAcceleration.z) > accelerationThreshold) {
// enter code here
}
基本上就是这样。请记住,每个加速度都会有一个相应的对应物。这意味着,如果您施加一个力来使设备向右移动(即加速),则将有一个相应的减速来停止运动,并让该设备停留在新位置。因此,您的if
条件将对每个单独的运动成立两次。
viewDidAppear
方法中,成为第一响应者:- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self becomeFirstResponder];
}
请确保您能成为第一响应者:
- (BOOL)canBecomeFirstResponder {
return YES;
}
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
if (event.subtype == UIEventTypeMotion){
//there was motion
}
}