Xamarin iOS - 带速度的UIView动画

时间:2017-08-08 07:45:19

标签: ios animation uiview xamarin.ios uipangesturerecognizer

我有一个UIView在所有其他人之上。这个UIView有一个UIPanGestureRecognizer来在屏幕上拖动它。如果用户停止平移,则视图将移动到计算出的位置,即左侧屏幕边界或右侧屏幕边界。这很好用,但现在我想考虑View在屏幕上移动的速度,当用户将手指抬离屏幕时,UIView不应该立即停止移动到端点,而是应该用曲线来做。

编辑1

我想我错了。我的意思是View应该移动用户拖动它的方向,但是它应该制作一条曲线并移动到所需的位置。把它想象成重力。用户将以从左下角到屏幕中间的速度拖动视图,并立即抬起他的手指。然后视图不应该停止,否则它应该在最后一个方向移动并慢慢移动到所需的位置,在这种情况下是右下角。

这是我已有的代码:

private void DidPan()
{
    CGPoint translation = PanGesture.TranslationInView(this.Superview);
    CGPoint velocity = PanGesture.VelocityInView(this.Superview);

    if (PanGesture.State == UIGestureRecognizerState.Changed)
    {
        this.Center = new CGPoint(lastLocation.X + translation.X, lastLocation.Y + translation.Y);
    }
    else if (PanGesture.State == UIGestureRecognizerState.Ended)
    {
        // Calculates the new position the view will be moving to
        var newLocation = new CGPoint(SetX(Superview.Bounds), SetY(Superview.Bounds));

        // Animate it to the desired location
        UIView.Animate(0.3, () =>
        {
            this.Center = newLocation;
        }, null);
    }
}

正如你所看到的,我们已经有了速度,但我不知道如何从这里继续。希望有人从这里有正确的起点,可以帮助我。

非常感谢!

1 个答案:

答案 0 :(得分:1)

我认为 UIKit Dynamics 可以满足您的要求。

请参阅此博客:https://blog.xamarin.com/drag-drop-and-snap-with-uikit-dynamics/