Как сделать, чтобы перетаскивание UIView замедлялось? - PullRequest
1 голос
/ 29 октября 2010

У меня есть UIView, который можно перетаскивать пальцем, который я реализовал с помощью UIPanGestureRecognizer.Это позволяет мне перетаскивать вид по горизонтали;влево или вправо.

Я заставляю мой вид двигаться, получая следующее состояние от UIPanGestureRecognizer (используя translationInView: метод):

  • UIGestureRecognizerStateBegan
  • UIGestureRecognizerStateChanged

Что происходит сейчас, так это то, что вид перестает двигаться, как только палец покидает поверхность экрана, что оказывает неестественный эффект.

То, что я хотел бы, было быпредставление перетаскивания замедляется, начиная с состояния UIGestureRecognizerStateEnded, плавно останавливаясь.

Такое поведение используется классом и подклассами UIScrollView (UIWebView, UITableView и т. д.).

Я пробовал несколько подходоввычисляя по скорости, времени, когда произошло касание, и остановил дистанцию ​​остановки и т. д. Но, честно говоря, у меня есть чувство, что я никуда не иду, чтобы получить естественное поведение.Я даже пытался использовать физический движок, как Бурундук.Но я нахожу это сложным для того, чего я пытаюсь достичь, и я почти уверен, что должно быть лучшее (если не простое) решение.

Большое спасибо!

Джереми

1 Ответ

1 голос
/ 30 октября 2010

В вашем распознавателе жестов сделайте так, чтобы, когда ваш палец покинул экран, вы начинали анимацию, чтобы продолжать короткую прокрутку в течение короткого промежутка времени с переходом «Ease Out».что-то вроде:

[UIView beginAnimations:@"FingerOff" context:nil];
[UIView setAnimationDuration:0.25f];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDelegate:self];
[UIView setAnimationCurve:UIAnimationViewEaseOut];
[myView setFrame:newFrame];
[UIView commitAnimation];

Вы можете заменить setFrame на что-то другое - независимо от того, как устанавливается прокрутка или просмотр, - может быть, даже setCenter.Сделайте прокрутку немного «дальше», чем текущая позиция.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...