設定
現在、音楽アプリを開発していますが、プログレスバーのスライダーに問題があります。
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
1秒に1回呼び出すようにメソッドを設定して、プログレスバーをさらに1秒移動します(動作中)
[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
また、 InterfaceBuilderで設定したイベントに対して呼び出すメソッドは次のとおりです。それも機能していません
- (IBAction)sliderChanged:(id)sender {
[self.musicPlayer setCurrentPlaybackTime:[[NSNumber numberWithFloat:self.currentlyPlayingTimeSlider.value] doubleValue]];
}
誰かが私が間違っていることを理解するのを手伝ってもらえますか?これらの最後の2つの方法では、最初の方法で問題がないため、何かである必要があります。他の場所では、スライダーをカスタマイズしたり、いじったりすることはありません。