iOS - Как превратить UISlider в Scrubber / Seekbar для воспроизведения видео?

У меня есть экземпляр AVAudioPlayer, который воспроизводит локальный аудиофайл с диска. Ход воспроизведения отражается в UIProgressView. Я пытаюсь заменить это на UISlider. Для выполнения задачи ползунок:

  • двигаться в ответ на событие таймера, чтобы указать текущую позицию воспроизведения
  • реагировать на ручное касание, чтобы разрешить очистку видео

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

Какие выходы "Отправить событие" в раскадровке я бы использовал для создания описанного выше поведения?

В настоящее время у меня есть общий обратный вызов «значение изменено».

введите описание изображения здесь

- (IBAction)sliderChanged:(id)sender {

 if(self.backgroundMusicPlayer == nil)
    {
        NSError* error = nil;
        NSData* data   = [self.audioFile data];
        self.backgroundMusicPlayer = [[AVAudioPlayer alloc]initWithData:data error:&error];

        [self.backgroundMusicPlayer prepareToPlay];
    }  
 self.backgroundMusicPlayer.currentTime = self.slider.value;
 [self.backgroundMusicPlayer play];
}

person Alex Stone    schedule 20.01.2015    source источник
comment
Убедитесь, что значения вашего ползунка подходят для времени воспроизведения. Возможно, вам придется их преобразовать.   -  person Ian MacDonald    schedule 20.01.2015


Ответы (2)


То, что у вас есть, правильно. Чтобы ваш код реагировал на действия пользователя, регулирующего ползунок, используйте событие Value Changed. Если вы хотите получать уведомление о прикосновении к ползунку, используйте событие Touch Down или добавьте распознаватель жестов к ползунку.

person matt    schedule 20.01.2015

Я бы все упростил и просто проверил свойство isTracking UISlider, которое он наследует от UIControl.

person psobko    schedule 20.01.2015