Пользовательский UIDynamicBehavior: как узнать общее количество шагов / тактов анимации?
Я хотел бы реализовать пользовательский UIDynamicBehavior, который делает представление "взрыв". Чтобы сделать это, мне нужно постепенно уменьшить его и увеличить в 2 раза.
Я делаю это, устанавливая вид alpha
а также bounds
в action
блок. Однако как узнать, как часто вызывается блок действий? Документы говорят "на каждый тик", но сколько?
Я добавил счетчик. Без других анимаций блок вызывается 30 раз. С некоторыми серьезными и динамичными поведениями это называется 500 раз.
Я также не понимаю, как UIDynamicAnimator
знает, когда его поведение "сделано", перемещая вещи вокруг. Может кто-нибудь пролить некоторый свет на это?
Приведенный ниже код иногда работает, но в других случаях поведение останавливается до того, как представление полностью анимируется (т. Е. Оно все еще видно).
self.action = ^{
static NSInteger count = 0;
NSLog(@"animation tick: %d", count);
count++;
UIView *view = (UIView*)[weakSelf.items lastObject];
view.alpha = view.alpha - 0.1;
CGRect bounds = view.bounds;
bounds.size.width += 1;
bounds.size.height += 1;
view.bounds = bounds;
};
1 ответ
Для определения окончания анимации вы можете попробовать это:
__weak Entity *weakSelf = self;
self.behavior.action = ^{
if (weakSelf.center.x == weakSelf.lastPosition.x && weakSelf.center.y == weakSelf.lastPosition.y) {
NSLog(@"end of dynamic movement");
}
weakSelf.lastPosition = weakSelf.center;
};
Или проверьте другое значение, которое вы меняете.