对于实验,我有一个UIViewController和一个截取触摸事件的自定义窗口,这样我就可以在屏幕上拖动和轻弹不同的UIViews。我处理了3种事件类型:UITouchPhaseBegan和UITouchPhaseMoving(我只是根据触摸坐标移动子UIView)和UITouchPhaseEnded(我向UIView施加一个力以使其在屏幕上移动,放慢速度摩擦)。
我计算结束触摸事件时要施加的力的方法是计算最后一个(来自UITouchPhaseMoving)和当前(来自UITouchPhaseEnded)触摸位置之间的方向向量,但它似乎没有给我结果我想要。
当我移动视图并平稳地将手指从屏幕上抬起时,它会很好地移动,但是当我“向运动”“移动”时,它不会移动到预期的程度。这是因为即使我在屏幕上移动了几帧,最后的抽搐动作也会使最后和当前触摸事件的坐标过于接近,所以我没有得到全力计算。
对于长文本感到抱歉,但我发现即使使用这种生涩/闪烁的动作,UIScrollView等视图仍然可以正常滚动;这是因为最终的力是在多个帧上计算的,而不仅仅是最后一帧和当前帧?如果是这样,是否有人知道滚动视图的内部工作方式,即使使用闪烁/不稳定的动作也可以很好地工作?
答案 0 :(得分:1)
我不知道内部运作, 但怀疑它通过触及下降坐标和时间以及释放坐标和时间来计算力矢量。一旦它有这个,对它施加减速,惯性。我认为这可能是很难做到的事情,苹果已经花了很长时间对其进行微调,甚至达到弹跳速度时达到极限。绝对是一个有趣的实验。