为了实现这种防弹,您需要跟踪其生命周期内的各个触摸.当第一次触摸发生时,您保存该触摸的位置并将对象移向该位置.应该将任何进一步的触摸与第一次触摸进行比较,如果它们不是第一次触摸则应该被忽略.这种方法还允许您处理多点触控,其中可以使对象朝向屏幕上当前的任何手指移动,然后如果第一个手指被抬起则移动到下一个手指,依此类推.
值得注意的是,UITouch对象在touchesBegan,touchesMoved和touchesEnded之间保持不变.您可以将UITouch对象视为在touchesBegan中创建,在touchesMoved中更改,并在touchesEnded中销毁.您可以通过将触摸对象的引用保存到在touchesBegan中创建的字典或数组中来跟踪触摸过程中的触摸阶段,然后在touchesMoved中,您可以检查任何现有触摸的新位置并更改如果用户移动手指,则可以使用对象(可以应用公差来防止抖动,例如,如果x / y距离小于某个公差,则不要改变路线).在touchesEnded中,您可以检查焦点中的触摸是否是结束的触摸,并取消对象的移动,或将其设置为朝向仍在发生的任何其他触摸移动.这很重要,就像你只检查任何旧的触摸对象结束一样,这也会取消其他触摸,这会产生意想不到的结果.
这篇文章在Obj-C中,但代码很容易移植到Swift并向您展示您需要做什么,只需查看“处理复杂多点触控序列”下的内容:https://developer.apple.com/library/ios/documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/multitouch_background/multitouch_background.html