创建一个简单的Simon克隆:如何在更新之间等待?

时间:2009-10-27 06:33:38

标签: iphone objective-c cocoa cocoa-touch

我正在学习Cocoa / Objective-C / iPhone SDK,作为一个应用我学到的东西的简单项目,我想创建一个简单版本的Simon游戏。四个彩色按钮,你会看到一个序列(红色,绿色,蓝色,红色等),你必须重复序列。

我相信我已经找到了大部分内容,除了一条:向用户显示序列。具体来说,如何实现突出显示按钮和按钮之间的延迟。 200ms后恢复正常。

如果我在主运行循环中睡眠,则更新不会正确发生(即使我明确地调用setNeedsDisplay)。如果我产生一个新线程,事情会很快变得复杂,因为我的类方法需要返回UI元素(即时变量)。

有什么建议吗?

4 个答案:

答案 0 :(得分:5)

您可以使用UIView上的+setAnimationStartDate:方法设置一些动画来执行此操作。为确保在动画期间没有人按下您的按钮,请在动画开始时调用-[UIApplication beginIgnoringInteractionEvents],最后调用-[UIApplication endIgnoringInteractionEvents]

我正在谈论的一个写在文本中的示例:

[[UIApplication sharedApplication] beginIgnoringInteractionEvents];
button1.highlighted = YES;

[UIView beginAnimations:@"" context:nil];
[UIView setAnimationStartDate: CFAbsoluteTimeGetCurrent() + 0.2];
[UIView setAnimationsEnabled:NO];
button1.highlighted = NO;
[UIView commitAnimations];

[UIView beginAnimations:@"" context:nil];
[UIView setAnimationStartDate: CFAbsoluteTimeGetCurrent() + 0.25];
[UIView setAnimationsEnabled:NO];
button2.highlighted = YES;
[UIView commitAnimations];

// etc.

[[UIApplication sharedApplication] performSelector:@selector(endIgnoringInteractionEvents) withObject:nil afterDelay:yourTotalDelay];

答案 1 :(得分:0)

“simon”是一个非常简单的MIDI音序器。因此,我强烈建议调查CoreAudio框架,特别是实时时钟功能。

答案 2 :(得分:0)

答案 3 :(得分:-1)

阅读核心动画框架的文档。