怎么防止iPhone多次晃动?

时间:2010-08-10 11:03:14

标签: iphone

我使用这种方法处理我的应用程序上的震动事件,但我有一个很大的问题让我发疯!

我使用这种方法: http://www.iphonedevsdk.com/forum/iphone-sdk-development/55087-iphone-shake-detection-problem.html#post230283

但问题是应用程序检测多次震动事件!

2010-08-10 14:06:43.700 APP[406:207] SHAKED
2010-08-10 14:06:44.340 APP[406:207] SHAKED
2010-08-10 14:06:44.692 APP[406:207] SHAKED
2010-08-10 14:06:44.868 APP[406:207] SHAKED
2010-08-10 14:06:45.044 APP[406:207] SHAKED
2010-08-10 14:06:45.172 APP[406:207] SHAKED
2010-08-10 14:06:45.332 APP[406:207] SHAKED
2010-08-10 14:06:45.492 APP[406:207] SHAKED
2010-08-10 14:06:45.644 APP[406:207] SHAKED
我怎么处理它?<​​/ p>

2 个答案:

答案 0 :(得分:1)

您必须在数据可用之前对其进行去抖动。原理很简单,一旦你读了SHAKE,就会忽略下一秒左右的所有值。

您可能需要考虑使灵敏度(延迟)可配置。

示例代码:

NSDate *start = [NSDate date];

-(void)method:(UIAccelerometer *)accelerometer {
    NSTimeInterval timeInterval = [start timeIntervalSinceNow];
    /* if our last shake was more than 1 second ago */
    if(timeInterval > 1.0){
        /* do yourthing here */
        start = [NSDate date];
    }
}

答案 1 :(得分:1)

问题可能是您检测到加速计数据的每次轻微变化。我使用以下代码来检测平均震动:

- (void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration 
{
    if(sqrt(acceleration.x*acceleration.x + acceleration.y*acceleration.y + acceleration.z*acceleration.z)>3.0)
    {
        [self DoSomething];
    }
}

您可以更改3.0值以检测更强/更轻的抖动