Во-первых, у вас есть несколько физических ошибок. Ваша distance
не является переменной 'расстояния', потому что вы суммируете значения ускорения от акселерометра. Кроме того, ваша velocity
на самом деле является переменной 'speed', потому что вы умножаете ускорение на временной интервал.
То, что вы действительно хотите сделать, это следить за ускорением.x для значений, которые превышают определенную заранее определенную величину. Эта величина должна быть достаточно низкой, чтобы пользователю не приходилось размахивать iPhone, но достаточно высокой, чтобы простые движения не пересекали ваш порог. Если acceleration.x больше 0 по вашему заранее заданному порогу или больше, то вы ускоряетесь правильно. Если acceleration.y меньше 0 на предварительно определенную сумму или больше, значит, вы ускоряетесь влево.
Гораздо сложнее определить скорость телефона за определенный период времени, потому что вам придется постоянно интегрировать значения ускорения. Акселерометр iPhone не невероятно точен и может быть шумным, поэтому через небольшой промежуток времени ваше приложение, вероятно, убедится, что ваш телефон движется в случайных направлениях. Кроме того, помните, что гравитация всегда будет отображаться в ваших значениях ускорения.