使用iphone进行抖动或投掷运动检测

时间:2012-03-09 15:39:21

标签: iphone ios xcode

我正在制作一个石头投掷应用程序,显示岩石跳过水面。我想要做的是当手从一侧快速移动到前面时检测到一个动作(就好像你正在跳过岩石一样)。我尝试了以下代码,这是我在日志中得到的结果。我可以使用手势检测吗?

-(void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
    if (event.subtype == UIEventSubtypeEndSeekingForward)
    {
        NSLog(@" Forward event ...");
    }
    else
    {
        NSLog(@" Something moved but I dont know what event ...");
    }

    if ([super respondsToSelector:@selector(motionEnded:withEvent:)])
        [super motionEnded:motion withEvent:event];
}

-(BOOL)canBecomeFirstResponder
{ 
    return YES; 
}

-(void) viewWillAppear:(BOOL)animated
{
    [self becomeFirstResponder];
    [super viewWillAppear:animated];
}
- (void) viewWillDisappear:(BOOL)animated
{
    [self resignFirstResponder];
    [super viewWillDisappear:animated];
}

这是我快速移动iPhone(双向发生)时得到的结果

  

有些东西感动但我不知道是什么事......

     

有些东西感动但我不知道是什么事......

     

有些东西感动但我不知道是什么事......

另外,我不得不付出很大的力量来进行检测工作。所以有两个问题

  • 我可以覆盖一些内置阈值数字吗?
  • 我怎样才能告诉它只有在电话向前移动时才能执行此操作?

由于

1 个答案:

答案 0 :(得分:0)

如果您看到class reference for UIEvent,您会发现唯一与动作相关的事件子类型为UIEventSubtypeMotionShake,这意味着您只能从该事件中知道该设备已被动摇。

要实现您想要达到的目标,您必须直接使用加速度计值。

这意味着,首先,您必须对加速度计在执行特定运动时返回的值以及运动的不同步骤进行一些测试。您还必须获得运动仍然有意义的值范围。

然后,您需要将这些值集成到您的应用程序中,基本上,您需要做的是,在加速计代表中,检查在运动的每个步骤中,加速度计给出的值你在你测试的范围内是有意义的。

建议不要在公园散步。