需要帮助剖析和重新创建基于 PastryKit 的完美滚动缓动

Need help dissecting and recreating the perfect scroll easing based on PastryKit

对于网络,我通常只使用本机滚动机制。它们快速、可靠且不涉及编码。

但是,随着越来越多地使用 Unity,我发现可用的滚动插件,即使是像 Unity.UI 或 NGUI 这样的大插件也很糟糕。我问了一圈,发现大多数平台都是这样。物理学很糟糕。

我做了很多研究并尝试了一些解决方案,从 NGUI scrollView 到 web iScroll.js 等等。我还没有找到与原始 Apple 的 PastryKit 一样完美的解决方案。现在,PastryKit 已经过时,已弃用,没有 API 并且像象形文字一样难以阅读。

重要的 是,在制作过程中,他们设法准确地重建了 iOS 动力学滚动物理行为。

我不是要实现 PastryKit,我是想弄清楚它是如何工作的。我正在尝试理解和复制。

我正在尝试找出他们使用的easings/formulas以及他们使用它们的逻辑条件。苹果有编写令人困惑的 JS 的疯狂方式,所以即使我是一名全栈开发人员,我也很难追踪所有内容。而且我认为几个大脑比一个更好,所以让我们看看,有人理解这个文件吗? :D

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

简而言之(所以没有误解):我正在尝试从这个文件中提取一组物理规则,我可以将其用作编写我的指南在我选择的任何平台上自己实现滚动。 :)

例如:'normal'滚动由{>300ms && >10px}定义,苹果在缓和减速动画时使用了以下贝塞尔曲线。 cubic-bezier.com/#.25,.46,.1,.94

更新:我们不久前解决了这个问题。我们发现了 Apple 是如何做到这一点的。 https://medium.com/homullus/recreating-native-ios-scroll-and-momentum-2906d0d711ad

经过数小时的剖析算法,我们得出结论,Apple 实际上在使用幻数。神奇的数字是:(鼓声)动量 * 0.95.

基本上,当触摸持续时,苹果会让你移动屏幕1:1。

在触摸端,Apple 会通过划分用户滑动的像素数和用户滑动的时间来获得动力。如果像素数小于 10 或时间小于 0.5,动量将被限制为零。

无论如何,一旦我们知道了动量(速度),他们就会在每一帧中将其乘以 0.95,然后将屏幕移动那么多。

如此愚蠢的简单和优雅,它伤害了。 :)