【问题标题】:Simple iPhone motion detect简单的 iPhone 运动检测
【发布时间】:2011-07-10 00:13:33
【问题描述】:

我需要检测陀螺仪/加速度计何时激活一定量。基本上是为了检测设备何时移动。我对 Core Motion 一无所知。

也许有人可以指导我学习入门教程或其他内容。

提前致谢。

【问题讨论】:

    标签: iphone objective-c xcode core-motion


    【解决方案1】:

    我认为你必须使用 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 条件将在每个动作中两次变为真。

    【讨论】:

    • 您提供的链接非常好!尽管我一直在搜索运动读数,并阅读了所有相关的课程参考资料 - 我只是找不到这样的摘要 - 谢谢!
    • 感谢您以简单易懂的方式进行解释:)
    • 此链接已失效 "Handling Processed Device-Motion Data" 您能否更新链接?
    • 在发表此评论时,您可以找到该文章的缓存副本here
    【解决方案2】:

    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
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-28
      • 2012-02-03
      • 1970-01-01
      • 2011-04-07
      • 1970-01-01
      相关资源
      最近更新 更多