2009-11-05 2 views
2

Я пытаюсь связать анимационные события. Приложение, которое я кодирую для работы, имеет викторину с несколькими вариантами. Сначала вы выбираете свой ответ с множественным выбором. Вид викторины исчезает. Затем надпись («правильная» или «неправильная») исчезает, а затем исчезает. Наконец викторина снова исчезает. События вызываются и обрабатываются основным viewController. Я знаю, что я могу связать события с setAnimationDelegate и setAnimationDidStopSelector, но я думаю, что будет проще и понятнее просто использовать setAnimationDelay, чтобы все анимации успели закончить до следующего запуска.Iphone последовательная анимация с setAnimationDelay

Я создал эту функцию, которая существует в классе, который содержит «правильную» «неправильную» метку.

- (void)showIncorrect:(float)duration withDelay:(float)delay{ 
labelView.text = @"Incorrect!"; 
labelView.textColor = [UIColor redColor]; 

[UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDelay:delay]; 
    [UIView setAnimationDuration:(duration/2)]; 
    self.alpha = 1.0; 
[UIView commitAnimations]; 

[UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDelay:(duration/2+delay)]; 
    [UIView setAnimationDuration:(duration/2)]; 
    self.alpha = 0.0; 
[UIView commitAnimations]; 

}

Может кто-нибудь сказать мой, почему первый блок анимации игнорируется? Я пытался вложить один блок анимации в другой, и это тоже не работает.

ответ

4

Когда вы анимируете этот способ, вы фактически устанавливаете соответствующее значение немедленно и рассказываете, что на экране оживляет, чтобы догнать эту новую реальность. Таким образом, любое значение, которое вы задали в первом блоке анимации, эффективно игнорируется, потому что вы перезаписали факт, что alpha == 1 тем фактом, что альфа == 0.

Для выполнения более сложных анимаций стоит и добавление анимаций с использованием CoreAnimation. Это немного больше работы, но вы получаете намного больше контроля.

В этом случае вы хотите использовать экземпляр CAKeyframeAnimation. Вероятно, вы также захотите использовать CABasicAnimation для анимации в своем новом викторине. Вы можете использовать CAAnimationGroup, чтобы убедиться, что несколько анимаций, которые вы добавляете, синхронизированы.

2

Я столкнулся с подобными проблемами, похоже, что iPhone оптимизирует чертеж, который встречается в одной и той же функции.

Что вы можете сделать, это разбить функцию вверх и выполнить выбор. Например

[self performSelector:@selector(hideMessage) withObject:self afterDelay:1.0]; 

Я использовал это несколько раз с хорошими результатами. Если вы хотите увидеть отличную запись о великолепных эффектах игрового стиля, ознакомьтесь с примером кода Formic в интересных проектах iPhone. Wolfgang действительно подталкивает взгляды к очень приятным эффектам игрового стиля.

В книгах Google есть это, но в целом книга содержит некоторые действительно отличные приемы.

Heres книга ссылка Google: http://books.google.com/books?id=_9qtPLmQxf8C&pg=PA6&lpg=PA6&dq=wolfgang+ante+formic&source=bl&ots=-vxvV3oLap&sig=G0BLW1RpItws-fwmXDI3mIjje4U&hl=en&ei=tVnzSt-3MImEMpL_8OgF&sa=X&oi=book_result&ct=result&resnum=1&ved=0CAoQ6AEwAA#v=onepage&q=wolfgang%20ante%20formic&f=false

Rich

Смежные вопросы