Настройка
В настоящее время я занимаюсь разработкой музыкального приложения, и у меня возникают проблемы со слайдером индикатора выполнения.
self.musicPlayer
является [MPMusicPlayerController applicationMusicPlayer]
self.currentlyPlayingTotalDuration
является NSNumber
self.currentlyPlayingTimeSlider
является UISlider
Обзор
Приведенный ниже код выполняется при выборе новой песни в MPMusicPlayerController
. В этом методе (не все из которых показаны) я настроил свой музыкальный проигрыватель на воспроизведение выбранной песни (, рабочая ) и ее воспроизведение (, рабочая ). Затем я установил полную продолжительность песни на максимальное значение ползунка (, рабочий )
self.currentlyPlayingTotalDuration = [[NSNumber alloc] initWithFloat:(int)[NSValue valueWithPointer:[self.musicPlayer.nowPlayingItem valueForKey:MPMediaItemPropertyPlaybackDuration]]];
[self.currentlyPlayingTimeSlider setMaximumValue:self.currentlyPlayingTotalDuration.floatValue];
Я зарегистрировал значения, чтобы увидеть, правильно ли установлены значения ( они )
NSLog(@"Number:%@", [NSNumber numberWithFloat:(int)[NSValue valueWithPointer:[self.musicPlayer.nowPlayingItem valueForKey:MPMediaItemPropertyPlaybackDuration]]]);
NSLog(@"Max:%f", self.currentlyPlayingTimeSlider.maximumValue);
Вывод журнала ниже, выглядит как надо
2011-08-24 13:38:25.004 App [1241:707] Number:1107392
2011-08-24 13:38:25.009 App [1241:707] Max:1400544.000000
А затем я установил для currentlyPlayingTimeSlider
значение 0, чтобы начать ( работает )
self.currentlyPlayingTimeSlider.value = 0.0;
Затем я настроил свой метод updateSliderTime
на вызов один раз в секунду, чтобы переместить индикатор выполнения на одну секунду дальше ( работает )
[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateSliderTime:) userInfo:nil repeats:YES];
Проблемы
Полный код метода приведен ниже для updateSliderTime
метода, который не работает , даже если он вызывается каждую секунду
- (void)updateSliderTime:(NSTimer *)timer {
[self.currentlyPlayingTimeSlider setValue:[[NSNumber numberWithDouble:self.musicPlayer.currentPlaybackTime] floatValue]];
}
Также ниже приведен метод, который я вызываю для события valueChanged
, которое я настроил в Интерфейсном Разработчике. Также не работает
- (IBAction)sliderChanged:(id)sender {
[self.musicPlayer setCurrentPlaybackTime:[[NSNumber numberWithFloat:self.currentlyPlayingTimeSlider.value] doubleValue]];
}
Может кто-нибудь помочь мне понять, что я делаю не так? Это должно быть что-то в этих двух последних методах, так как первый вызывает нормально. Я больше не занимаюсь настройкой / манипуляциями с ползунком где-либо еще.