Как UIScrollView прокручивает так хорошо, даже с легким движением? - PullRequest
0 голосов
/ 16 декабря 2010

Для экспериментов у меня есть UIViewController и пользовательское окно, которое перехватывает сенсорные события, так что я могу перетаскивать и пролистывать различные UIViews по экрану.Есть три типа событий, которые я обрабатываю: UITouchPhaseBegan и UITouchPhaseMoving (где я просто перемещаю sub-UIView в соответствии с координатой касания) и UITouchPhaseEnded (где я применяю силу к UIView, чтобы заставить его перемещаться по экрану, замедляясь стрение).

Способ вычисления силы, применяемой при завершении события касания, заключается в вычислении вектора направления между последним (из UITouchPhaseMoving) и текущим (из UITouchPhaseEnded) местоположениями касания, однако это не так.кажется, дает мне результаты, которые я хочу.

Когда я перемещаю вид и плавно отрываю палец от экрана, он плавно перемещается, однако, когда я "дергаю" движение к концу, оно не перемещается какнасколько ожидалось.Это потому, что хотя я перемещаю его по экрану на несколько кадров, резкое движение в конце делает координаты последнего и текущего события касания слишком близкими, поэтому я не получаю рассчитанную полную силу.

Извините за длинный текст, но я заметил, что представления, такие как UIScrollView, по-прежнему прокручиваются должным образом даже с этим резким движением;Это потому, что окончательная сила рассчитывается по количеству кадров, а не только по последним и текущим кадрам?Если так, кто-нибудь знает внутреннюю работу скролл-просмотра, которая позволяет ему так хорошо работать даже при резком или резком движении?

1 Ответ

1 голос
/ 16 декабря 2010

Я не знаю внутреннюю работу, но подозреваю, что он вычисляет вектор силы, беря координаты и время касания, а также координаты и время освобождения. как только он получит это, применяя замедление к нему, для инерции. Я думаю, что это может быть что-то, что очень трудно понять правильно, и Apple потратила долгое время, настраивая это, даже вплоть до скорости отскока, когда он достигает своих границ. Определенно интересный эксперимент.

...