2017-04-04 1 views
0

曲の再生中にプログレスビューが更新されません。私は各時間間隔で更新する更新メソッドを使用して、他のポストから読み取ることによって。UIProgressViewはオーディオプレーヤーをアップデートしていませんか?

- (void)viewDidLoad { 
[super viewDidLoad]; 
NSString *filePath = [[NSBundle mainBundle]pathForResource:@"Fix you_Coldplay" ofType:@"mp3" inDirectory:@"Coldplay"]; 
NSLog(@"%@",filePath); 
NSURL *url = [NSURL fileURLWithPath:filePath]; 
NSLog(@"%@",url); 
musicPlayer = [[AVAudioPlayer alloc]initWithContentsOfURL:url error:nil]; 
[musicPlayer prepareToPlay]; 
[trackProgress setProgress:0.0]; 
} 

私はupdateTime:メソッドの呼び出しにも使用されている再生ボタンを持っています。

- (IBAction)playButton:(id)sender { 
[musicPlayer play]; 

[NSTimer scheduledTimerWithTimeInterval:0.0 target:self selector:@selector(updateTime:) userInfo:nil repeats:YES]; 

NSTimeInterval interval = musicPlayer.currentTime/musicPlayer.duration; 
NSLog(@"%f",interval); 
} 

updateTime:メソッド

-(void)updateTime:(NSTimer *)timer { 
trackProgress.progress = (musicPlayer.currentTime/musicPlayer.duration); 
} 

私はプログラミングとさえスタックオーバーフローに非常に新しいです。これは私が投稿している最初の質問です。私を助けて、事前に感謝してください。すべての変更タイマ値の

答えて

0

まず:0.5または1秒

[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(updateTime:) userInfo:nil repeats:YES]; 

//値の変更は、あなたが0のように初期値としてtrackProgressを設定していることを確認します。

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    trackProgress.progress = 0.0; 
    } 

希望すると、問題が解決されます。

+0

の進捗ビューを更新することを確認します。私がプレイしているとき、プログレスバーはゼロ位置から少し前に移動していますが、その後はやはり馬鹿になります – Finch

+0

この部門の最終フロート値は何ですか:(musicPlayer.currentTime/musicPlayer.duration)を確認できますか? –

+0

私はupdateTime:メソッドにNSLogステートメントを挿入したとき、浮動小数点値は0.0から始まり、最終浮動小数点値は0.999081です。しかし、エンドトラックの終わりに音楽が止まったときにそれをチェックしたところ、それは0.002723だったので、突然0.993965に上がり、0.999081で終わった。 – Finch

-1

これは役に立ちます。 Timerを作成し、以下に示すようにcommon runloopに追加します。また、後で停止できるように、タイマーへの参照を保持してください。

self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateTime:) userInfo:nil repeats:YES]; 
[[NSRunLoop mainRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes]; 
+0

*スケジュールされた*タイマーは、実行ループに暗黙的に追加されます。 – vadian

0

これは動作しませんでした、メインスレッド

-(void)updateTime:(NSTimer *)timer { 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     self.trackProgress.progress = (musicPlayer.currentTime/musicPlayer.duration); 
    }); 
} 
関連する問題