【发布时间】:2011-07-10 00:13:33
【问题描述】:
我需要检测陀螺仪/加速度计何时激活一定量。基本上是为了检测设备何时移动。我对 Core Motion 一无所知。
也许有人可以指导我学习入门教程或其他内容。
提前致谢。
【问题讨论】:
标签: iphone objective-c xcode core-motion
我需要检测陀螺仪/加速度计何时激活一定量。基本上是为了检测设备何时移动。我对 Core Motion 一无所知。
也许有人可以指导我学习入门教程或其他内容。
提前致谢。
【问题讨论】:
标签: iphone objective-c xcode core-motion
我认为你必须使用 Core Motion。好消息是它并不难用于您的问题域。开始阅读Event Handling Guide,尤其是处理已处理的设备运动数据部分。如果您只是想知道 做了一个轻微的动作,如您所说,您可以在 CMDeviceMotion.userAcceleration 上省略旋转处理和窄信号处理。这是因为每次旋转也会产生加速度计信号。
按照startDeviceMotionUpdatesToQueue:withHandler: 中的说明创建CMDeviceMotionHandler 您的 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
}
}
【讨论】: