[UIView animateWithDuration: задержка: как удалить при выходе - PullRequest
0 голосов
/ 25 ноября 2011

У меня возникает зависание приложения, когда пользователь нажимает кнопку «Домой»: Фрагмент, вызывающий проблему:

[UIView animateWithDuration:0.5
                      delay: (float)random()/RAND_MAX * 1.0f
                    options: UIViewAnimationOptionAllowUserInteraction | UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat
                 animations:^{
                     [self setAlpha:1.0f];
                 }
                 completion:^(BOOL finished){
                 }];

Я полагаю, что происходит то, что случайная задержка планирует анимацию, а затем пользователь выходит из нее - так что метод, который удаляет анимацию (для нее установлено автоматическое повторение), никогда не вызывается? и приложение зависает, все еще показывая анимацию.

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

Я пытался вызвать [self.layer удалить все анимации] в представлении после нажатия кнопки «Домой», но это не помогает.

Мне не удалось отладить проблему, как это происходит в "no-mans-land" после вызова applicationWillEnterbackground. Инструменты не показывают ничего необычного.

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

(это может быть executeSelector: withDelay за кадром):

Ответы [ 2 ]

2 голосов
/ 17 мая 2012

Отправка вызова removeAllAnimations на слой представления должна удалить анимацию.

Вы сказали «Я пытался вызвать [self.layer удалить все анимации] в представлении после нажатия кнопки« Домой », но это не помогает».

Вы не стали бы называть себя в представлении, вы бы сами отправили это сообщение на слой представления.

Из контроллера вида код может выглядеть примерно так:

[myAnimatedView.layer removeAllAnimations];

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

1 голос
/ 07 августа 2012

Если вы хотите достичь базового слоя от «я», вы должны сделать:

[self.view.layer removeAllAnimations];
...