3

我想实现一个自定义 UIDynamicBehavior 使视图“爆裂”。为此,我需要将其淡出并将其缩放到其大小的 2 倍。

我通过在块中设置视图alpha和来做到这一点。但是,我怎么知道动作块被调用的频率?文档说“在每个刻度上”,但是有多少?boundsaction

我添加了一个计数器。在没有其他动画的情况下,该块被调用 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;

    };
4

1 回答 1

0

要检测动画何时完成,您可以尝试以下操作:

__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;
};

或者检查您正在更改的另一个值。

于 2014-05-28T01:41:59.210 回答