UIView animateWithDuration: задержка: работает странно - PullRequest
5 голосов
/ 10 ноября 2010

У меня странная проблема с блоками анимации iPhone. Этот код:

[UIView animateWithDuration:2 delay: 0 options: 0 animations:
^(void) { [controller setBackgroundColor: [UIColor blueColor]]; }
completion: nil];

[UIView animateWithDuration:2 delay: 2 options: 0 animations:
^(void) { [controller setBackgroundColor: [UIColor redColor]]; }
completion: nil];

Мгновенно устанавливает красный фон, не пропуская синее состояние. То же самое, ДАЖЕ для этого кода:

[UIView animateWithDuration:2 delay: 0 options: 0 animations:
^(void) { [controller setBackgroundColor: [UIColor blueColor]]; }
completion: 

^(BOOL wrwg) {
    [UIView animateWithDuration:2 delay: 2 options: 0 animations:
    ^(void) { [controller setBackgroundColor: [UIColor redColor]]; }
    completion: nil];
}];

То есть, когда я пытаюсь запустить вторую анимацию ПОСЛЕ того, как первая закончена. В чем проблема?

Ответы [ 3 ]

8 голосов
/ 13 ноября 2010

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

Также загляните в этот пост, где я задавал тот же вопрос (с моим решением): http://www.iphonedevsdk.com/forum/iphone-sdk-development/64451-animation-one-after-another.html#post265531

5 голосов
/ 06 мая 2013

Свойство backgroundColor является НЕ анимированным в UIView.Вместо этого используйте backgroundColor свойство слоя представления:

#import <QuartzCore/QuartzCore.h> // don't forget to link this library in project settings

[UIView animateWithDuration:2.0
                      delay:0.0
                    options:UIViewAnimatingOptionBeginFromCurrentState
                 animations:^(void){
                   controller.layer.backgroundColor = [UIColor blueColor].CGColor;
                 }
                 completion:NULL];

PS Как указывалось в предыдущих постах, убедитесь, что ваш controller унаследован от UIView.Если он унаследован от UIViewController, используйте вместо него controller.view.

3 голосов
/ 27 июля 2011

У меня только что была эта проблема, и у меня она обычно есть. Есть две причины, хотя мне еще предстоит проверить одну.

Потому что я забыл подключить конструктор интерфейса к анимированному представлению, поэтому блок сказал: "Анимировать на нуле? Ничего не поделаешь, поэтому я перейду к блоку завершения!"

Другая причина в том, что есть что-то, что нужно сделать, но это не анимируемое свойство (скрытое), и я бы поспорил, что блок завершения вызывается, как только переменные в анимации соответствуют их концу «to» или «end» " государство. Это всего лишь теория, но я держу пари, что это отдельный поток, который выполняется в определенном темпе с: if (currentValueOfProperty = finalValue) doCompletion (). (простите за псевдокод).

Кто-то, вероятно, должен это проверить, хотя

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