问题:
我想“回放”一系列按键,并播放与播放的每个按钮相关的声音。
目前,我能够“回放”声音,但我还想在播放声音的同时简要更改UIButtons的标题颜色。
我编写的代码遍历一个数组,指示按下了哪些按钮。在这个for循环中,声音正确播放,但是在循环退出的方法之前,没有任何按钮标题会改变颜色。
即。在循环期间声音播放,但标题文本不会改变颜色,直到循环完全退出并且代码退出方法。我通过设置断点并观察行为来确定这一点。
我在屏幕上看到的是 - 我按下按钮开始播放序列,播放声音,然后在声音退出播放后,按钮立即改变标题颜色。
如何才能获得它,以便每个按钮仅在声音播放时更改其标题颜色?
我希望这有点道理,感谢你花时间阅读所有这些内容。 :)
答案 0 :(得分:2)
如果循环播放所有声音和动画,循环执行得太快,您无法控制动画的时间。
相反,您可以使用NSTimer
并在每次定时器触发时谨慎地执行每个声音和动画。
答案 1 :(得分:1)
我假设你的意思是你的按钮不会在正确的时间改变颜色,即使你在正确的地方有正确的代码?那是因为绘图没有立即更新,所以你需要这样的东西:
[self performSelectorOnMainThread:@selector(changeColor) withObject:nil waitUntilDone:YES];
- (void)changeColor
{
[UIButton setTitleColor:YOUR_COLOR forState:UIControlStateNormal];
}
这将暂停程序,直到颜色更新并重新绘制,以便正确显示。
答案 2 :(得分:1)
当UI更新在主线程中继续时,您可能会尝试在后台线程中播放声音。
[self performSelectorInBackground:@selector(playSound:) withObject:sound];
在playSound
中,不要忘记建立新的自动释放池,这样就不会泄漏内存。