Как воспроизводить аудиофайл ТОЛЬКО в то время, пока пользователь трясет iPhone?

Я прочитал несколько сообщений о том, как обнаружить сотрясения, но я не уверен:

  1. Каков в настоящее время лучший способ обнаружения сотрясений?

    • а также -
  2. Как воспроизводить аудиофайл ТОЛЬКО в то время, пока пользователь трясет 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.

Другие вопросы по тегам