如何正确更改UIButtons的标题颜色?

时间:2011-08-13 21:54:34

标签: iphone objective-c ios cocoa-touch

问题:

我想“回放”一系列按键,并播放与播放的每个按钮相关的声音。

目前,我能够“回放”声音,但我还想在播放声音的同时简要更改UIButtons的标题颜色。

我编写的代码遍历一个数组,指示按下了哪些按钮。在这个for循环中,声音正确播放,但是在循环退出的方法之前,没有任何按钮标题会改变颜色。

即。在循环期间声音播放,但标题文本不会改变颜色,直到循环完全退出并且代码退出方法。我通过设置断点并观察行为来确定这一点。

我在屏幕上看到的是 - 我按下按钮开始播放序列,播放声音,然后在声音退出播放后,按钮立即改变标题颜色。

如何才能获得它,以便每个按钮仅在声音播放时更改其标题颜色?

我希望这有点道理,感谢你花时间阅读所有这些内容。 :)

3 个答案:

答案 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中,不要忘记建立新的自动释放池,这样就不会泄漏内存。