Как воспроизводить аудиофайл ТОЛЬКО в то время, пока пользователь трясет iPhone? - PullRequest
2 голосов
/ 03 апреля 2010

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

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

    • и -
  2. Как воспроизвести аудиофайл * ТОЛЬКО 1013 * , пока пользователь трясет iPhone?

У кого-нибудь есть совет, примеры / учебники или пример кода?

Спасибо

Ответы [ 3 ]

3 голосов
/ 03 апреля 2010

Вы можете реализовать что-то подобное ниже в контроллере (или на самом деле любом 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];
        }
    }
}
2 голосов
/ 03 апреля 2010

Используйте 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];
    }
  }
}

для подходящих реализаций селекторов паузы, приостановки, воспроизведения, воспроизведения.

0 голосов
/ 03 апреля 2010

Ответ был дан раньше здесь . Я использую измененную версию кода, предложенного там, и она прекрасно работает. Обратите внимание, что в следующих версиях ОС вы сможете обнаруживать движения дрожания через стандартный API.

...