0

AVAudioPlayer に問題があります。サウンドが再生される前に UICollectionView のセルに色を付けたいのですが、このコードではこの操作を行うことができません。

背景を変更する操作は、音を鳴らす命令よりも遅いと思います。このため、セルは背景色を変更しません。

int randomNumber = (arc4random() % [soundArray count]);
self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[soundArray objectAtIndex:randomNumber] error:&error];
self.audioPlayer.delegate = self;
if(!self.audioPlayer){
    NSLog(@"Error creating player: %@", error);
}
 else{
    CGColorRef colorRef = [[cellArray objectAtIndex:randomNumber] backgroundColor];
    [[cellArray objectAtIndex:randomNumber] setBackgroundColor:(__bridge CGColorRef)([UIColor blackColor])];

    [self.audioPlayer play];
    sleep([self.audioPlayer duration]);

    [[cellArray objectAtIndex:randomNumber] setBackgroundColor:colorRef];
}
4

3 に答える 3

0

やろうとしていることを実行する最善の方法は、クラスを AVAudioPlayerDelegate にして、

audioPlayerDidFinishPlaying:successfully:

そのメソッドは、プレーヤーが終了したときにシステムによって自動的に呼び出されます。これにより、全体的に最も信頼性が高く効率的なパフォーマンスが得られます。

于 2013-08-22T09:38:36.000 に答える
0

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(itemDidFinishPlaying) name:AVPlayerItemDidPlayToEndTimeNotification object:songItem];

通知センターを設定できます..ソングの再生が終了した後に起動します...「itemDidFinishPlaying」は呼び出したいメソッドです...songItemはAVPlayerItemです..

于 2013-08-22T09:51:19.953 に答える