我一直在寻找这个问题的答案,但是没有运气。
问题在于:我有四个UILabel和声音片段。我希望每个标签在播放声音片段时显示突出显示的文本。
问题是当我在模拟器上测试时,只有最后一个标签会突出显示。
以下是我尝试过的一些事情:
[self playSound:@"this"];
[thisLabel setTextColor:[UIColor orangeColor]];
sleep(1);
[self playSound:@"is"];
[thisLabel setTextColor:[UIColor blackColor]];
[isLabel setTextColor:[UIColor orangeColor]];
[self playSound:@"a"];
[isLabel setTextColor:[UIColor blackColor]];
[aLabel setTextColor:[UIColor orangeColor]];
[self playSound:@"word"];
[aLabel setTextColor:[UIColor blackColor]];
[currentWord setTextColor:[UIColor orangeColor]];
这时我发现当我在模拟器中测试时,只有最后一个标签会突出显示。
我接下来尝试的是在playSound函数结束时调用此函数。
- (void)shiftHighlight:(NSString *)word
{
UILabel *currentWord = [self currentWord];
UILabel *thisLabel = [self thisLabel];
UILabel *isLabel = [self isLabel];
UILabel *aLabel = [self aLabel];
if ([word isEqualToString:@"this"])
{
[thisLabel setHighlighted:YES];
[isLabel setHighlighted:NO];
[aLabel setHighlighted:NO];
[currentWord setHighlighted:NO];
} else if ([word isEqualToString:@"is"]) {
[isLabel setHighlighted:YES];
[thisLabel setHighlighted:NO];
[aLabel setHighlighted:NO];
[currentWord setHighlighted:NO];
} else if ([word isEqualToString:@"a"]) {
[aLabel setHighlighted:YES];
[thisLabel setHighlighted:NO];
[isLabel setHighlighted:NO];
[currentWord setHighlighted:NO];
} else {
[currentWord setHighlighted:YES];
[thisLabel setHighlighted:NO];
[isLabel setHighlighted:NO];
[aLabel setHighlighted:NO];
}
}
将突出显示的文本的颜色设置为其他位置的橙色。 这与第一次尝试具有相同的效果。
最近我尝试连续调用此函数:
- (void)readSection:(NSString *)section
{
[self playSound:section];
[self shiftHighlight:section];
}
我也尝试过使用NSTimers的东西,但是这让我很困惑,而且好像我正在用它们咆哮错误的树。
所有标签都启用了行为。
所以,如果有人为我提供解决方案,或者可以仔细解释如何使用NSTimers解决这个问题,我非常感谢。
答案 0 :(得分:1)
在所有情况下,语句都不会等待声音完成播放并按发生顺序事先执行。最后执行的语句将是最终结果,即最终标签被突出显示。
如果你的playSound方法有办法传递一个回调块或一个在完成后执行的委托函数,那就是你的地方应该将逻辑写入高亮标签或播放下一个声音。