Пользовательский 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;
};

Или проверьте другое значение, которое вы меняете.

Другие вопросы по тегам