Inv*_*ory 5 xcode objective-c accelerometer ios core-motion
我想在手机静止2秒钟后采取措施。我已经搜索了谷歌周围的年龄和堆栈溢出。我发现“ Accelerometer DidAccelerate”已贬值,而CoreMotion替代了它。我所看到的一切都与“摇动”动作有关。我已经尝试阅读苹果的文档,但这让我感到困惑!
基本上,我希望应用程序能够检测到手机上的重力在一定时间内保持在很小的范围内(建议您将手机放在桌子上或其他物体上)并进行呼叫和实例化或让应用执行某项操作。
任何帮助将不胜感激。
这与简单 iPhone 运动检测中描述的问题类似。CMMotionManagerApple 文档中描述了基本设置,如 Mike Pollard 在他的评论中所述。我特别推荐处理已处理的设备运动数据部分。
然后您需要的是CMDeviceMotion.userAcceleration,其中包含没有重力的纯加速度。
CMMotionManager *motionManager = [[CMMotionManager alloc] init];
// UPDATE: set interval to 0.02 sec
motionManager.deviceMotionUpdateInterval = 1.0 / 50.0;
[motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue mainQueue]
withHandler:^(CMDeviceMotion *deviceMotion, NSError *error) {
CMAcceleration userAcceleration = deviceMotion.userAcceleration;
double totalAcceleration = sqrt(userAcceleration.x * userAcceleration.x +
userAcceleration.y * userAcceleration.y + userAcceleration.z * userAcceleration.z);
// UPDATE: print debug information
NSLog (@"total=%f x=%f y=%f z=%f", totalAcceleration, userAcceleration.x, userAcceleration.y, userAcceleration.z);
// if(totalAcceleration < SOME_LIMIT) ...
Run Code Online (Sandbox Code Playgroud)
然后像 codeplasma在上面的回答中描述的那样继续。
另请注意,如果在地铁、公交车等处使用,由于外部加速度,该解决方案可能不精确。