我使用这种方法处理我的应用程序上的震动事件,但我有一个很大的问题让我发疯!
但问题是应用程序检测多次震动事件!
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>
答案 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值以检测更强/更轻的抖动