Блочная анимация iOS 4.2 -> Почему я получаю эти предупреждения: - Переполнение [UIApplication beginIgnoringInteractionEvents].игнорирование - PullRequest
5 голосов
/ 03 ноября 2010

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

У меня есть 2 следующих метода для достижения этого эффекта вобуляции:

- (void)wobble {
 int amountInRadians = (self.tag % 2) == 0 ? 2.0 : -2.0;
 containerView.transform = CGAffineTransformRotate(CGAffineTransformIdentity, RADIANS(-amountInRadians));

 [UIView animateWithDuration:0.10 
        delay:0.0 
      options:(UIViewAnimationOptionAllowUserInteraction | UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse)
      animations:^ {
       containerView.transform = CGAffineTransformRotate(CGAffineTransformIdentity, RADIANS(amountInRadians));
      }
      completion:NULL
 ];
}

- (void)stopWobble {
 [UIView animateWithDuration:0.01
        delay:0.0 
      options:(UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionCurveLinear)
      animations:^ {
       containerView.transform = CGAffineTransformIdentity;
      }
      completion:NULL
  ];
}

Когда я прекращаю колебание, я получаю предупреждение (многократно):

- [UIApplication beginIgnoringInteractionEvents] переполнение.Игнорирование.

затем (много раз, совпадающее число начальных):

- [UIApplication endIgnoringInteractionEvents] вызвано без соответствия -beginIgnoringInteractionEvents.Игнорирование.

Что происходит на земле?Если я закомментирую анимацию stopWobble, это нормально, но, естественно, моя анимация не останавливается.Если я удаляю опцию «UIViewAnimationOptionAllowUserInteraction» при запуске анимации, я получаю предупреждение beginIgnoringInteractionEvents , но это также бесполезно, поскольку мне нужно взаимодействовать с этими представлениями, пока они колеблются.

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

Ответы [ 2 ]

11 голосов
/ 17 ноября 2010

Попробуйте добавить UIViewAnimationOptionAllowUserInteraction в stopWobble.Я уже получал это сообщение об ошибке раньше, и, похоже, оно связано с двумя анимациями, которые пытаются выполнить одновременно, когда они явно не настроены на это.Добавление UIViewAnimationOptionAllowUserInteraction ко второй анимации решило эту проблему для меня.

0 голосов
/ 24 мая 2012

Полагаю, это происходит, когда у вас слишком много видов, которые будут анимированы одновременно, например, сетка пользовательских видов в viewDidAppear.

a.Под iOS4 все они пытаются одновременно отключить взаимодействия UIApplication и избежать проблем, связанных с переполнением UIApplication и игнорированием некоторых из них.

b.После анимации всех представлений снова сообщите UIApplication для включения взаимодействий, но UIApplication не распознает некоторые из вызовов разрешения, поскольку они были проигнорированы в (a).

...