Я согласен с ответом Али относительно ускорения, но не при броске. Но в любом случае имейте в виду, что приложение, которое заставляет пользователей бросать свои iPhone, не будет иметь больших шансов получить одобрение магазина приложений, -)

у быть в состоянии определить, не столкнулся ли iphone с чем-то ... было бы лучше послушать гироскоп / акселерометр и оценить, насколько быстро он перемещается или он внезапно переместился и остановился.

На самом деле, как бы я оценил, если устройство переместилось, а затем внезапно остановилось?

Этот ответ отличный, но наоборотiOS: точное определение энергии удара по выходу акселерометра - это сглаживает движение, если что-то я хочу обнаружить резким движением.

Также доступны ли гироскоп и акселерометр для 3GS?

ОБНОВЛЕНО С КОДОМ

Из Apple, докhttp://developer.apple.com/library/iOS/documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/MotionEvents/MotionEvents.html#//apple_ref/doc/uid/TP40009541-CH4-SW26

Выделение мгновенного движения из данных ускорения Если вы используете данные акселерометра для определения только мгновенного движения устройства, вы должны быть в состоянии изолировать внезапные изменения в движении от постоянного влияния силы тяжести. Вы можете сделать это с помощью фильтра верхних частот.

Перечисление 4-6 показывает упрощенное вычисление фильтра верхних частот. Значения ускорения из предыдущего события сохраняются в переменных-членах accelX, accelY и accelZ класса. В этом примере вычисляется значение фильтра нижних частот, а затем вычитается из текущего значения, чтобы получить только мгновенный компонент движения.

Перечисление 4-6, Получающее мгновенную часть движения от данных акселерометра

define kFilteringFactor 0.1

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
    // Subtract the low-pass value from the current value to get a simplified high-pass filter
    accelX = acceleration.x - ( (acceleration.x * kFilteringFactor) + (accelX * (1.0 - kFilteringFactor)) );
    accelY = acceleration.y - ( (acceleration.y * kFilteringFactor) + (accelY * (1.0 - kFilteringFactor)) );
    accelZ = acceleration.z - ( (acceleration.z * kFilteringFactor) + (accelZ * (1.0 - kFilteringFactor)) );

   // Use the acceleration data.
}

Как мне тогда «использовать данные ускорения», чтобы определить, обнаружено ли мгновенное движение?

Ответы на вопрос(5)

Ваш ответ на вопрос