Как проверить, что мой метод вызывается изнутри '[UIView animateWithDuration:...]'?
У меня есть метод, который устанавливает свойства UIView. И я называю это прямо в некоторых случаях и от UIView animateWithDuration:
блок. В этом методе я изменяю среди прочего путь слоя представления, поэтому он некорректно работает с анимацией (путь должен быть явно анимирован).
Как я могу определить, что мой метод вызывается изнутри [UIView animateWithDuration:...]
?
[UIView animateWithDuration:duration animations:^{ [myClass myMethod]; }];
...
- (void)myMethod
{
if (__view_is_animating__) // how to check here?
{...}
}
На данный момент я установил кастом viewIsAnimationFlag
до [UIView animateWithDuration:...]
и проверить это в myMethod
но это грубо
1 ответ
Решение
Спасибо Дэвиду Рённквисту на objc.io:
"вид возвращается NSNull
всякий раз, когда слой запрашивает действие (обработчик анимации для любого анимируемого свойства), кроме случаев, когда изменение свойства произошло внутри блока анимации "
NSLog(@"we are inside animation block: %@",
[myView actionForLayer:myView.layer forKey:@"position"] ? @"YES" : @"NO");