Как воспроизводить аудиофайл ТОЛЬКО в то время, пока пользователь трясет iPhone?
Я прочитал несколько сообщений о том, как обнаружить сотрясения, но я не уверен:
Каков в настоящее время лучший способ обнаружения сотрясений?
- а также -
Как воспроизводить аудиофайл ТОЛЬКО в то время, пока пользователь трясет iPhone?
У кого-нибудь есть совет, примеры / учебники или пример кода?
Спасибо
3 ответа
Используйте UIAccelerometer и реализуйте протокол UIAccelerometerDelegate в своем классе. Возможно, вы могли бы сделать что-то вроде этого:
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acc {
float twoGs = 2.0;
if ((acc.x * acc.x) + (acc.y * acc.y) + (acc.z * acc.z) > twoGs * twoGs) {
if ([self paused]) {
[self play];
}
} else {
if ([self playing]) {
[self pause];
}
}
}
для подходящих реализаций паузы, паузы, воспроизведения, воспроизведения селекторов.
Вы можете реализовать что-то вроде этого ниже в контроллере (или на самом деле любой UIResponder...). Они доступны в версии 3.0 и позже. Вам не нужно опускаться до уровня акселерометра, если вы не хотите делать сложные вещи, зависит от того, сколько деталей вы хотите от встряхивания.
- (void)viewDidAppear:(BOOL)animated {
[self becomeFirstResponder];
}
- (BOOL)canBecomeFirstResponder {
return YES;
}
- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event {
if (motion==UIEventSubtypeMotionShake) {
if ([self paused]) {
[self play];
}
}
}
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {
if (motion==UIEventSubtypeMotionShake) {
if ([self playing]) {
[self pause];
}
}
}
- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event {
if (motion==UIEventSubtypeMotionShake) {
if ([self playing]) {
[self pause];
}
}
}
На это уже отвечали раньше здесь. Я использую измененную версию кода, предложенного там, и она прекрасно работает. Обратите внимание, что в следующих версиях ОС вы сможете обнаруживать движения дрожания с помощью стандартного API.