免責事項: 私は iOS プログラミングに比較的慣れていないので、楽しみのために基本を独学で学ぼうとしています... だから優しくしてください :-)
AVAudioplayer を使用して一連の .mp3 ファイルを一緒に再生するアプリを構築しています。これまでのところ、その部分はうまく機能しています。IBActions、および IBOutlets が接続されています。ボタンをクリックすると、オーディオが再生されます。
私の問題は次のとおりです。再生ボタンが main.storyboard に直接追加され、設定され、Interface Builder で定義された初期状態でカスタムされています。再生をクリックすると、ボタンの画像を変更して、再生中であることを示したいと思います。ただし、オーディオが開始されるとすぐに、ビューが一時停止されているように見えます。ボタンの画像は、オーディオの再生が完了するまで同じままです。そうして初めて、ボタンの画像自体が更新されますが、ほとんど役に立ちません。
また、この特定のボタンに接続されていない別のランダムな UIImageView の画像を設定しようとしました。同じ経験。playAudioArray メソッドをコメント アウトするとすぐに、ボタン スワップがすぐに機能します。
-(IBAction)start_playing:(UIButton*)pressed_button {
[_btn_start setImage:[UIImage imageNamed:@"btn_on-active"] forState:UIControlStateNormal];
[self playAudioArray];
}
先に進むのに十分なだけ残っていることを願っています.何か考え/コメント/提案はありますか??
どうもありがとう - ドリュー
#
アップデート:
オーディオ プレーヤーが障害になっていると、ビューの更新がうまくいかないことがわかりました。このコードは正常に動作します...
if (audioPlayer.playing == YES) {
[audioPlayer pause];
[sender setImage:[UIImage imageNamed:@"btn_on.png"] forState:UIControlStateNormal];
[_btn_stop setImage:[UIImage imageNamed:@"btn_off.png"] forState:UIControlStateNormal];
} else {
NSString *path = [[NSBundle mainBundle] pathForResource:@"audio_file1" ofType:@"mp3"];
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
audioPlayer.volume = 1.0;
audioPlayer.numberOfLoops = 0;
[audioPlayer setMeteringEnabled: YES];
[audioPlayer play];
//changes the image when the button is pressed
[sender setImage:[UIImage imageNamed:@"btn_on.png"] forState:UIControlStateNormal];
[_btn_stop setImage:[UIImage imageNamed:@"btn_off.png"] forState:UIControlStateNormal];
}
しかし、このコードは以下ではありません。
} else {
//changes the image when the button is pressed
[sender setImage:[UIImage imageNamed:@"btn_on.png"] forState:UIControlStateNormal];
[_btn_stop setImage:[UIImage imageNamed:@"btn_off.png"] forState:UIControlStateNormal];
NSArray *theSoundArray = [NSArray arrayWithObjects:@"audio1",@"audio2",@"audio3",nil];
for (int i = 0; i < totalSoundsInQueue;) {
NSString *sound = [theSoundArray objectAtIndex:i];
// Wait until the audio player is not playing anything
while(![audioPlayer isPlaying]){
NSString *path = [[NSBundle mainBundle] pathForResource:@"mom" ofType:@"mp3"];
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
audioPlayer.volume = 1.0;
audioPlayer.numberOfLoops = 0;
[audioPlayer setMeteringEnabled: YES];
[audioPlayer play];
i++;
}
}
}
オーディオは正常に再生され、すべてのサウンドがループされ、エラーは発生しません。ただ、ボタンの「オン状態」は、ループの再生が完了した後にのみ設定されます。さまざまな種類のループ方法でこれを試しました。For, for each, while... サウンドのループを開始するたびに、オーディオの再生はうまく機能しますが、ディスプレイのフォーカスがすべて失われます。
それは私に思い出させます。ループに入ると、「停止」ボタンがクリック可能 (タップ可能) の性質を失います。ループの実行が完了するまで。ループしていない場合、停止ボタンは問題なく機能します。
ここで完全な初心者の間違いを犯していたら申し訳ありません... 考え/コメントはありますか?