Нужна помощь в анализе и воссоздании идеального замедления прокрутки на основе PastryKit.

В Интернете я обычно просто использую собственные механизмы прокрутки. Они быстрые, надежные и не требуют кодирования.

Но, работая все больше и больше в Unity, я обнаружил, что доступные плагины для прокрутки, даже такие большие, как Unity.UI или NGUI, просто ужасны. Я поспрашивал и выяснил, что на большинстве платформ так и есть. Физика откровенно плохая.

Я провел кучу исследований и попробовал несколько решений, от NGUI scrollView до веб-iScroll.js и так далее. Я не нашел более совершенного решения, чем оригинальный Apple PastryKit. Теперь PastryKit устарел, устарел, не имеет API и так же труден для чтения, как иероглифы.

Но что важно, так это то, что при его создании им удалось точно воссоздать физическое поведение кинетической прокрутки iOS.

Я не пытаюсь внедрить PastryKit, я пытаюсь выяснить, как он работает. Я пытаюсь понять и воспроизвести.

Я пытаюсь узнать, какие смягчения/формулы они используют и логические условия, в которых они их используют. полный разработчик стека, мне трудно отследить все. И я подумал, что несколько мозгов лучше, чем один, так что давайте посмотрим, кто-нибудь понимает этот файл? :D

https://github.com/jimeh/PastryKit/blob/master/mobile/dist/PastryKit.js

КОРОТКО (во избежание недоразумений): я пытаюсь извлечь из этого файла набор физических правил, которые я могу использовать в качестве руководства для написания собственной реализации прокрутки на любой платформе, которую я выберите. :)

например: «нормальная» прокрутка определяется как {> 300 мс && > 10 пикселей}, Apple использует следующую кривую Безье при ослаблении анимации замедления. кубический-bezier.com/#.25,.46,.1,.94

ОБНОВЛЕНИЕ. Мы решили эту проблему некоторое время назад. Мы узнали, как Apple добивается успеха. https://medium.com/homullus/recreating-native-ios-scroll-and-momentum-2906d0d711ad


person Marko Mitranić    schedule 27.07.2016    source источник
comment
НГУИ? какие? сколько тебе лет вроде 95? :)   -  person Fattie    schedule 28.07.2016
comment
быстрый случайный пример использования Unity.UI (это совершенно тривиально)... stackoverflow.com/a/34744087/294884   -  person Fattie    schedule 28.07.2016
comment
Я обновил вопрос в надежде, что будет легче понять, чего я пытаюсь достичь :) Спасибо за ваши ответы, Джо.   -  person Marko Mitranić    schedule 28.07.2016


Ответы (1)


После многих часов анализа алгоритма мы пришли к выводу, что Apple действительно использует магические числа. И магическое число: (барабанная дробь) импульс * 0,95.

По сути, пока длится касание, Apple позволяет перемещать экран 1:1.

На сенсорном конце Apple получит импульс, разделив количество пикселей, которые пользователь провел, и время, за которое пользователь провел пальцем. Если бы количество пикселей было меньше 10 или время было меньше 0,5, импульс был бы зафиксирован до нуля.

В любом случае, как только нам станет известен импульс (скорость), они будут умножать его на 0,95 в каждом кадре, а затем сдвигать экран на эту величину.

Так по-идиотски просто и элегантно, что больно. :)

person Marko Mitranić    schedule 30.11.2016