目标c-用声音剪辑顺序突出显示UILabels



我已经为这个问题寻找答案有一段时间了,但运气不佳。

问题是:我有四个UILabels,以及与它们配套的声音片段。我希望每个标签在播放其声音片段时显示突出显示的文本。

问题是,当我在模拟器上测试它时,只有最后一个标签会被突出显示。

以下是我尝试过的一些东西:

[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做一些事情,但这让我很困惑,而且我似乎对他们说错了方向。

在所有标签上启用行为。

所以,如果有人能为我找到解决方案,或者能仔细解释如何使用NSTimer来解决这个问题,我会非常感谢她。

在所有情况下,语句都不会等待声音播放完毕,而是按照出现的顺序提前执行。执行的最后一条语句将是最终结果,即高亮显示的最终标签
如果您的playSound方法有一种方法可以传递回调块或在完成后执行的委托函数,则应该在此处将逻辑写入高亮标签或播放下一个声音。

最新更新