У меня есть UIView, лежащий прямо над всеми остальными. Этот UIView имеет UIPanGestureRecognizer для перетаскивания по экрану. Если пользователь прекратил панорамирование, представление перемещается в расчетную позицию, которая является левой или правой границей экрана. Это работает довольно хорошо, но теперь я хочу учитывать скорость, с которой представление перемещается по экрану, и когда пользователь убирает палец с экрана, 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);
}
}
Как видите, у нас уже есть скорость, но я не знаю, как продолжить дальше. Надеюсь, у кого-то есть правильная отправная точка отсюда и может помочь мне.
Большое спасибо!