Как сделать обратный вызов анимации UIView? - PullRequest
0 голосов
/ 03 сентября 2010

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

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

Итак, я разделил анимацию на два блока. Однако, когда я делаю это, первая анимация мгновенно завершается, а затем происходит вторая. Я подозреваю, что это потому, что анимация на том же виде. Возможно, не может быть двух отдельных блоков анимации для одного и того же представления?

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

Вот пример кода, чтобы получить представление об одном из способов, которые я пробовал. 'селектор' - это метод, который мне нужно вызывать на полпути (после того, как альфа станет прозрачной).

[UIView beginAnimations:name context:view];
[UIView setAnimationDuration:(duration/2)];
[UIView setAnimationDelegate:delegate];
[UIView setAnimationDidStopSelector:selector];
[view setAlpha:0.0];
[UIView commitAnimations];

name = [name stringByAppendingString:@"_reverse"];
[UIView beginAnimations:name context:view];
[UIView setAnimationDelay:(duration/2)];
[UIView setAnimationDuration:(duration/2)];
[UIView setAnimationDelegate:delegate];
[UIView setAnimationDidStopSelector:selector];
[view setAlpha:1.0];
[UIView commitAnimations];

Редактировать: я хочу избегать анимационных «блоков», так как я хотел бы, чтобы код был совместим с pre-OS4. Я также хотел бы сохранить метод статичным, чтобы я мог использовать его как библиотечный метод.

1 Ответ

2 голосов
/ 03 сентября 2010

Вы пытались поместить в анимацию вторую часть анимации и использовать NSTimer или performSelector: withObject: afterDelay:?

Я не знаю, работают ли они или нет, но анимации UIView и материалы для рисования имеют тенденциюиметь странные взаимодействия, когда много вещей делается одновременно.Например, вы устанавливаете пару анимаций, чтобы они отключались одна за другой в одном методе.Разнесите их так, чтобы первая анимация не знала, какая из них может помочь.Я понимаю, что вы устанавливаете задержку для второго, но UIViews странны в этом смысле.

Редактировать: Только что попробовал, работает как шарм.

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