IOS: UIViewImage setAlpha проблема - PullRequest
       3

IOS: UIViewImage setAlpha проблема

0 голосов
/ 09 августа 2011

У меня есть этот код:

, когда изображение изменяется альфа с 0,00 на 1,00, это сразу, а не через 3 секунды, почему?

- (void) startAnimation{

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:3];
[successView setAlpha:1.00];
[UIView commitAnimations];


[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:3];
[successView setAlpha:0.00];
[UIView commitAnimations];}

1 Ответ

3 голосов
/ 09 августа 2011

Обе анимации запускаются в одном и том же цикле запуска (именно так работают анимации UIView - все анимации в одном цикле запуска «сцепляются». Вам нужно будет использовать

[UIView setAnimationDelay:3.0];

На второй анимации. <ч /> Пример кода
Есть два способа сделать это: использовать стандартную анимацию начала / фиксации или метод блоков. В этом примере используется код анимации начала / фиксации, который у вас есть. Проблема заключается в том, что анимации объединяются, и, не заходя в CA, стандартное поведение анимации состоит в том, что один «принудительно» завершается до запуска других. Это связано с циклами выполнения; Построение анимационных интерфейсов из WWDC 2010 углубляется в это. Но код для выполнения того, что вы хотите, выглядит так:

- (void)fadeOut {
    [UIView beginAnimations:@"Animation2" context:NULL];
    [UIView setAnimationDuration:3];
    [self.testView setAlpha:0.00];
    [UIView commitAnimations];
}
- (IBAction)animate {
    [UIView beginAnimations:@"Animation1" context:NULL];
    [UIView setAnimationDuration:3];
    [self.testView setAlpha:1.00];
    [UIView commitAnimations];

    [self performSelector:@selector(fadeOut) withObject:nil afterDelay:3.0];
}

Вы должны заставить его разорвать цикл выполнения, в основном. Главное, что нужно помнить, это то, что анимация не выполняется последовательно, как вы могли ожидать, что код будет.

Код на основе блоков выглядит следующим образом. Обратите внимание, что я использую опцию автоповтора, которая автоматически повторяет анимацию. Обратите внимание, что в анимации вы устанавливаете свойство, поэтому по умолчанию после завершения анимации вид снова становится видимым. Поэтому в блоке завершения вы снова установите свойство равным нулю.

- (IBAction)animate {
    [UIView transitionWithView:self.testView duration:3.0 options:UIViewAnimationOptionAutoreverse animations:^{self.testView.alpha = 1.0;} completion:^(BOOL finished) {self.testView.alpha = 0.0;}];
}

Надеюсь, это поможет!

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