Создание простого клона Саймона: как ждать между обновлениями? - PullRequest
1 голос
/ 27 октября 2009

Я изучаю Cocoa / Objective-C / iPhone SDK, и в качестве простого проекта для применения того, что я узнал, я хотел создать простую версию старой игры Simon. Четыре цветные кнопки показывают последовательность (красный, зеленый, синий, красный и т. Д.), И вам нужно повторить последовательность назад.

Полагаю, я понял большую часть, за исключением одной части: показ последовательности пользователю. В частности, как реализовать задержку между выделением кнопки и ее возвратом в нормальное состояние через 200 мс.

Если я сплю в главном цикле выполнения, обновление не происходит должным образом (даже если я явно вызываю setNeedsDisplay). Если я создаю новый поток, все быстро усложняется, поскольку мой метод класса должен обращаться к элементам пользовательского интерфейса (мгновенным переменным).

Какой совет?

Ответы [ 4 ]

5 голосов
/ 27 октября 2009

Вы можете использовать метод +setAnimationStartDate: в UIView, чтобы настроить некоторые анимации для этого. Чтобы никто не нажимал ваши кнопки во время анимации, вызовите -[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];
0 голосов
/ 27 ноября 2009
0 голосов
/ 27 октября 2009

"simon" - очень простой MIDI-секвенсор. поэтому я настоятельно рекомендую изучить CoreAudio Framework, в частности, функции часов реального времени.

0 голосов
/ 27 октября 2009

Прочитайте документы для платформы Core Animation.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...