使用web我通常只使用本机滚动机制。它们快速,可靠,不涉及编码。
但是,在Unity中越来越多地工作时,我发现滚动的可用插件,甚至Unity.UI或NGUI等大插件都非常糟糕。我问了一下,发现在大多数平台上都是这样的。物理学很糟糕。
我做了一些研究,我尝试了一些解决方案,从NGUI scrollView到web iScroll.js等等。我找不到像原版Apple的PastryKit那样完美的解决方案。现在,PastryKit已经过时,已被弃用,没有API,也难以像象形文字一样阅读。
但重要是什么,在制作它时,他们设法完全重新创建了iOS动态滚动物理行为。
我没有尝试实现PastryKit,我想知道它是如何工作的。我正在努力理解和复制。
我正在尝试 找出他们使用的缓动/公式 以及他们使用它们的逻辑条件.Apple有一种疯狂的方式来编写令人困惑的JS,所以即便如此我是一个完整的堆栈开发人员,我很难跟踪所有内容。我认为很少有人比一个好,所以让我们看看,有没有人理解这个文件? :d
https://github.com/jimeh/PastryKit/blob/master/mobile/dist/PastryKit.js
IN SHORT(所以没有误解):我试图从这个文件中提取一组物理规则,我可以将它作为指导,以便编写我自己的滚动实现我选择的任何平台。 :)
例如:'normal'滚动由{> 300ms&& > 10px},当缓和减速动画时,apple使用以下贝塞尔曲线。 cubic-bezier.com /#25中,0.46,0.1,0.94
更新:我们刚刚解决了这个问题。我们发现了Apple如何做到这一点。 https://medium.com/homullus/recreating-native-ios-scroll-and-momentum-2906d0d711ad
答案 0 :(得分:0)
经过数小时的解剖算法后,我们得出结论,Apple实际上使用的是魔术数字。神奇的数字是:(鼓声)动量* 0.95。
基本上,当触摸持续时,苹果让你以1:1的速度移动屏幕。
在触控端,Apple会通过划分用户刷过的像素数和用户刷过的时间来获得动力。如果像素数小于10或时间小于0.5,则动量将被钳制为零。
无论如何,一旦我们知道了动量(速度),他们会在每一帧中将它乘以0.95,然后将屏幕移动那么多。
如此愚蠢的简单和优雅,它会伤害。 :)