gpt4 book ai didi

iphone - 在 AVAudioPlayer 播放之前做一些事情

转载 作者:行者123 更新时间:2023-11-29 03:41:31 28 4
gpt4 key购买 nike

我的 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];
}

最佳答案

首先,我假设您问题标题中的“之后”指的是“之前”。

但是,我认为您的问题与 sleep() 函数的使用有关。它的问题是它会在您指定的时间内阻止执行。 iOS 中的所有 UI 修改(包括对背景颜色的修改)都不会立即执行,而是当您将控制权返回到当前 RunLoop 时执行(粗略地说,只是为了让您理解:在您的方法返回后的某个时间)。通过使用 sleep ,您会延迟每次更新,这会导致问题。一般情况下, sleep 不是您想要使用的,因为您确实不想阻止执行!

我建议你摆脱 sleep 并使用 - 例如 - NSTimer 来代替:它们不会阻止任何东西。或者,您可以将注意力转向 AVAudioPlayer 的委托(delegate)机制(如 John Woods 所说),以便在播放完毕后重置背景颜色。

关于iphone - 在 AVAudioPlayer 播放之前做一些事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18376591/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com