第一次接触开球和触球移动至少有一次不稳定的跳跃。如何最好地捕获事件以获得平稳的低速touchesMoved情况?

时间:2018-03-03 01:55:42

标签: ios swift uitouch

[问题在底部]

我试图重新实现UIScrollView有各种原因,并注意到通过touchesBegan和touchesMoved 捕获的第一个触摸位置有一个不稳定的跳跃,通常在第一个~5之间事件

此异常值目前会导致我的实现跳过滚动内容几个像素,然后才能进行平滑跟踪。

这意味着即使手指以恒定速度移动,触摸事件之间的距离也不会(接近)恒定(=第一次触摸移动事件被延迟,因此不能平滑地对应于手指移动)。

如果手指停留几个事件周期,则不会发生这种情况。此外,在iPad上进行测试并使用没有合并/预测触摸的铅笔 时,体验非常顺畅,不会发生跳跃

基于此,我猜在完全60赫兹的触摸跟踪可用之前,设备需要很短的时间进行预热。因为即使没有特定的铅笔代码(例如合并/预测),铅笔也不会显示出前几次触摸跳跃的迹象,因此可以合理地假设设备根据尖端靠近屏幕而变暖(我记得这一点)一些Apple演示文稿),加上通常高得多的采样率

最后,使用模拟器和触控板拖动进行测试,无论速度如何都显示没有跳跃,支持手指输入的真实iOS设备的唤醒阶段论文。

我在网上找不到任何相关信息,很可能是因为我不知道要搜索什么。

使用和不使用铅笔在iPhone X和iPad pro 10.5上进行测试

Apple的一个很好的示例项目是here,其中一个简单的绘图层可以使用或不使用铅笔。

屏幕截图显示了三个示例线条,用手指在iPad上以不同的速度从左到右,最快的在顶部。线段是单独的触摸测量,浅灰色用于显示合并事件(使用铅笔会更频繁地发生)。 很明显,第一个touchesMoved事件触发的时间晚于跟踪事件,导致跟踪距离跳跃。

distance between touch events

我没有理由相信这是一个实现问题,因为我用多个小例子测试它。如上所述首先休息手指将导致这一点,这意味着它也不应该是手指本身的问题(初始阻力/粘性等)

在查看Apple UIScrollView时,没有跳跃。无论交互如何开始(休息与立即行动,快速与慢速运动),体验都是顺畅的。这引出了以下问题:

是否有一些我遗漏的实施细节?也许Apple正在使用一些内部设置?似乎不太可能但是谁知道

Apple是否使用一些短暂的动画来隐藏测量中的这个初始差距? 我想用手机240fps slomo来看这个,但还没有这样做。如果它们有动画,任何想法它们是如何做的?某些机制可以比~X事件的touchesMoved delta更快地转换视图,直到它可以赶上最小的视觉干扰?不知道,听起来很复杂

还有什么想法如何在没有低速单次初始跳转的情况下,如何基于touchesMoved事件平滑地转换元素?

0 个答案:

没有答案