Толчок акселерометра издает звук только один раз? - PullRequest
1 голос
/ 12 ноября 2009

Я пытаюсь реализовать функцию, которая обнаруживает, что пользователь трясет его / ее iPhone, и затем приложение издает лайящий звук. Пока у меня есть код, прикрепленный ниже, и он работает. Но, если я потрясу телефон сильнее, он сделает два или более лая один за другим. Как сделать так, чтобы это происходило только один раз за сотрясение, независимо от того, насколько сложно?

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

Ответы [ 3 ]

5 голосов
/ 12 ноября 2009

Вы можете использовать NSTimer - смотрите здесь: раздел "Таймер"

После воспроизведения звука установите для логической переменной hasBarked значение YES и затем вызовите таймер. Через две секунды таймер устанавливает «hasBarked» на «NO» и отключает себя. Наконец, поместите весь метод воспроизведения звука в блок if, который воспроизводит звук, только если значение hasBarked равно NO.

3 голосов
/ 12 ноября 2009

Почему бы не сохранить значение при последнем воспроизведении звука?

time_t last_time_played_bark = 0;


#define MINIMUM_TIME_BETWEEN_BARKS 5   // in seconds
time_t now = time(NULL);

if (last_time_played_bark + MINIMUM_TIME_BETWEEN_BARKS < now) {
    // BARKING_SOUND
    last_time_played_bark = now;
}

Предположительно, вы хотите, чтобы MINIMUM_TIME_BETWEEN_BARKS был как минимум столько же времени, сколько требуется для воспроизведения звука.

1 голос
/ 12 ноября 2009

В качестве дополнительного примечания: если вы просто хотите обнаружить жесты дрожания, вам может оказаться проще использовать события движения, добавленные в ОС 3.0 , чем пытаться свернуть свои собственные из необработанных данных акселерометра.

Я согласен с предложением Epsilon Prime сохранить отметку времени последнего воспроизведения звука в качестве средства регулирования частоты его воспроизведения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...