我正在学习Cocoa / Objective-C / iPhone SDK,作为一个应用我学到的东西的简单项目,我想创建一个简单版本的Simon游戏。四个彩色按钮,你会看到一个序列(红色,绿色,蓝色,红色等),你必须重复序列。
我相信我已经找到了大部分内容,除了一条:向用户显示序列。具体来说,如何实现突出显示按钮和按钮之间的延迟。 200ms后恢复正常。
如果我在主运行循环中睡眠,则更新不会正确发生(即使我明确地调用setNeedsDisplay
)。如果我产生一个新线程,事情会很快变得复杂,因为我的类方法需要返回UI元素(即时变量)。
有什么建议吗?
答案 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)
gerry3在这里给出答案:
答案 3 :(得分:-1)
阅读核心动画框架的文档。