2010-08-10 2 views
0

Я использовал этот метод для обработки события shake в моем приложении, но у меня есть огромная проблема, которая сводит меня с ума!Как предотвратить многократное изменение 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 

Как управлять кабиной?

ответ

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]; 
    } 
} 
+0

извините! Я не понимаю, можете ли вы убрать меня? – Momi

+1

@Momeks: Я добавил очень простой пример того, что я имею в виду. В основном вы просто проверяете, когда произошло последнее встряска, и игнорируйте любое дрожание в течение заданного временного интервала. Возможно, было бы полезно объединить его с кодом @ Marichka. У меня нет опыта работы с акселерометром iPhone, поэтому я не знаю, насколько он чувствителен. – Wolph

+0

Я объяснил основную проблему здесь! : http://stackoverflow.com/questions/3414800/shake-iphone-with-accelerometer Вы можете взглянуть? – Momi

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 для обнаружения сильнее/легкие встрясок

Смежные вопросы