Как проверить, что мой метод вызывается изнутри '[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");
Другие вопросы по тегам