摇动手势不起作用

时间:2010-11-16 14:24:28

标签: iphone xcode ios4

我使用代码检测抖动,这个代码在设备上工作,但是当我在模拟器上使用摇动手势时不起作用?

我使用下面的代码来检测它

#define kAccelerationThreshold      2.2
#define kUpdateInterval         (1.0f/10.0f)

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
{
        if (fabsf(acceleration.x) > kAccelerationThreshold || fabsf(acceleration.y) > kAccelerationThreshold || fabsf(acceleration.z) > kAccelerationThreshold)
            ...
}

3 个答案:

答案 0 :(得分:5)

看看UIResponder的motionEnded:方法。您可以在窗口上实现motionEnded,查看或查看控制器以检测抖动,如下所示:

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event 
{
    if (event.type == UIEventSubtypeMotionShake) 
    {
        // your code here

    }
}

在我的应用中,我需要一个应用程序范围的抖动处理程序。所以我将UIWindow子类化(我的应用程序有一个窗口,就像大多数一样)并将处理程序放在该子类中。

答案 1 :(得分:2)

'Shake Gesture'(可能在模拟器上使用)不是使用加速度计的自定义抖动检测,而是iOS检测到的抖动事件。所以你不能使用你的加速度计didAccelerate方法来检测它。检查第二个答案(不是接受的答案)到this question,看看如何检测摇晃手势。

答案 2 :(得分:1)

它可以工作,但不会在其他答案中列出的模拟器中。只是忽略这个事实,并通过其他方式(例如按钮等)在模拟器中调用该方法。我不建议使用与您可以通过模拟器触发的事件相对应的实际摇动事件。除非您希望您的用户将手机丢到各处。内置的震动检测不是很敏感。