6

我正在使用 UIDynamics 实现一些动画,以在视图之间启用一些基于物理的转换。我想以编程方式暂停并继续这些动画以响应用户触摸。到目前为止,我发现这样做的唯一方法是从动态动画师中删除行为,然后像这样重新添加它们:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self.dynamicAnimator removeBehaviour: self.behaviour1];
    [self.dynamicAnimator removeBehaviour: self.behaviour2];
    // etc
}

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    self.behaviour1 = [[UIGravityBehavior alloc] initWithItems: @[self.item]];
    self.behaviour1.gravityDirection = self.gravityVector;
    [self.dynamicAnimator addBehaviour: self.behaviour1];

    self.behaviour2 = [[UICollisionBehavior alloc] initWithItems: @[self.item]];
    [self.behaviour2 addBoundaryWithIdentifier: @"Boundary" forPath: self.boundary];
    [self.dynamicAnimator addBehaviour: self.behaviour2];

    // etc
}

(旁白:我也使用[self.dynamicAnimator updateItemUsingCurrentState: item]而不是重新创建行为,但我仍然必须从动态动画制作器中删除它们并再次重新添加它们,以便在用户触摸屏幕时暂停。)

我想做的是self.dynamicAnimator.running = NO暂停,然后self.dynamicAnimator.running = YES继续。这会更整洁,涉及的代码更少(我目前有五种行为可以做到这一点),并且有助于避免过程中的潜在错误。不幸的是,该dynamicAnimator.running属性是只读的,所以这是不可能的。

有没有办法在我错过的一两行中暂停和继续 UIDynamicAnimator?

4

0 回答 0