我有一个UIView附加到UICollisionBehavior。当尝试在屏幕上轻按一个新位置时,我正在尝试为其中心设置动画,但是使用此代码块似乎无法做到这一点:

    [UIView animateWithDuration:0.7f
                          delay:0.0f
                        options:UIViewAnimationOptionCurveEaseOut | UIViewAnimationOptionBeginFromCurrentState
                     animations:^{
                         [self.mainCharacter setCenter:location];
                     }
                     completion:nil];

谁能建议一种更UIKitDynamics友好的方式来做到这一点?

谢谢。

更新

因此,我的问题的第一部分类似于发布的问题,并且可能重复了一部分,但是,尽管从技术上讲,它解决了该问题的第一部分中的问题,但似乎确实干扰了UICollisionBehavior中的冲突测试。

这个问题的第二部分是询问是否有更好的方法可以做到这一点。我以为可以使用UIDynamicItem在给定的时间内加速UIPushBehavior,但这似乎是恒定的。

谁能推荐如何使用UIPushBehavior完成上述操作?

最佳答案

在UIKit Dynamics中,当您要动画化更改中心时,可以在UISnapBehavior中添加UIDynamicAnimator(首先删除所有先前的捕捉行为)。例如,为UISnapBehavior创建一个属性,然后您的点击手势识别器可以将其捕捉到该点(以纪念UICollisionBehavior),如下所示:

- (void)handleTap:(UITapGestureRecognizer *)gesture
{
    if (self.snap)
        [self.animator removeBehavior:self.snap];

    CGPoint point = [gesture locationInView:gesture.view];
    UISnapBehavior *snap = [[UISnapBehavior alloc] initWithItem:self.viewToAnimate snapToPoint:point];
    [self.animator addBehavior:snap];

    self.snap = snap;
}

您可以通过调整dampingUISnapBehavior属性来控制“弹跳”。如果您不喜欢它在捕捉时旋转视图,还可以添加UIDynamicItemBehavior并将allowsRotation设置为NO

10-08 16:54