UIButton - коснитесь и удерживайте, коснитесь

У меня есть несколько UIButtons, которые управляют музыкальным проигрывателем iPhone.

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

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

Вот код, который я сейчас использую:

- (void)previousButtonTouchedDown {
 [self performSelector:@selector(seekBackwards) withObject:nil afterDelay:1];
}

- (void)previousButtonTouchedUpInside { 
 MPMusicPlaybackState playbackState = self.iPodPlayer.playbackState;

 if (playbackState == MPMusicPlaybackStateSeekingBackward) {
  [self.iPodPlayer endSeeking];
 } else {
  [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(seekBackwards) object:nil];
  [self.iPodPlayer skipToPreviousItem];
 }
}

- (void)seekBackwards {
 [self.iPodPlayer beginSeekingBackward];
}

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

Спасибо.


person dev    schedule 25.10.2009    source источник


Ответы (2)


Я не проверял это, и я не знаю, является ли это лучшим решением.

  • Вы можете прикрепить действие к UIControlEventTouchedDown кнопки, а затем запустить таймер примерно на 1 секунду.
  • Когда таймер срабатывает, он может вызвать метод, который начинает поиск.
  • Then attach another method to the button's UIControlEventTouchedUp.
    • Check if the player is seeking
      • if it is seeking, stop seeking
      • иначе пропустить вперед.

Как это звучит?

person Jasarien    schedule 25.10.2009

Хм.

После запуска моего приложения на устройстве с ОС 3.1.2 (используя тот же код из исходного поста) кажется, что проблема устранена. Тот же код, который ищет И пропускает на устройстве 3.0, ищет ТОЛЬКО на устройстве 3.1.2.

Таким образом, кажется, что в 3.0 состояние воспроизведения плеера в UIControlEventTouchedUp равно воспроизведению, а не пропуску. На 3.1.2 все наоборот.

Кто-нибудь знает решение, которое не включает проверку состояния воспроизведения плеера?

person dev    schedule 25.10.2009