2012-03-13 10 views
1

iOSオーディオプレーヤーを開発中です。再生中の現在の曲の進行状況を示すプログレスバーを実装したいと思います。 私のViewControllerクラスには、時間と継続時間の2つのインスタンスとbackgroundというAVAudioPlayerインスタンスの2つのインスタンスがあります。iOS 5のプログレスバーを更新する

- (IBAction)play:(id)sender { 
    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"some_song" ofType:@"mp3"]; 
    NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:filePath]; 
    background = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:nil]; 
    background.delegate = self; 
    [background setNumberOfLoops:1]; 
    [background setVolume:0.5]; 
    [background play]; 
    time = 0; 
    duration = [background duration]; 
    while(time < duration){ 
     [progressBar setProgress: (double) time/duration animated:YES]; 
     time += 1; 
    } 
} 

誰でも私が間違っていることを説明できますか? ありがとうございます。

答えて

9

再生中に進行状況バーの進行状況を更新しません。サウンドを再生するときは、プログレスバーを1、2、3、4、5、... 100%に設定します。現在のランオールを残すことなくすべて。つまり、最後のステップ、完全な進捗バーが表示されます。

NSTimerを使用してプログレスバーを更新する必要があります。このようなもの:

- (IBAction)play:(id)sender { 
    /* ... */ 
    [self.player play]; 
    self.timer = [NSTimer scheduledTimerWithTimeInterval:0.23 target:self selector:@selector(updateProgressBar:) userInfo:nil repeats:YES]; 
} 

- (void)updateProgressBar:(NSTimer *)timer { 
    NSTimeInterval playTime = [self.player currentTime]; 
    NSTimeInterval duration = [self.player duration]; 
    float progress = playTime/duration; 
    [self.progressView setProgress:progress]; 
} 

再生を停止するとタイマーが無効になります。

[self.timer invalidate]; 
self.timer = nil; 
+0

ありがとうございます! ;-) – nemesis

関連する問題