我正在使用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?