Tag: 手势

您可以定义自己的自定义手势识别器

如果要实现Apple尚未提供的手势,则可以自定义手势。 但是,他们建议使用标准手势,因为用户已经熟悉它们,因此请花一些时间考虑自定义手势是否正确。 自定义手势通常会出现在游戏中,因此可能是添加您的创意手势识别器的好地方。 您可以定义两种类型的自定义手势识别器: 离散 -当手势涉及特定事件模式时。 示例:识别对勾,圆圈或V形(请参见下面的示例)。 由于它们可以具有多个状态,因此比连续状态更易于实现。 连续 -当手势未遵循预定义的模式时,当您希望收集用户输入并且没有失败情况时。 示例:在屏幕上识别用户的图纸。 通常,这需要更多的精力来实施。 离散手势识别器示例 出于学习目的,我们选择了一个识别正确的人字形的简单示例,然后打开图片库。 在实际应用中,您可能需要研究其他标准手势,以使用加速器来打开照片库。 状态机 在进入它之前,我们应该了解状态机。 这将是离散手势(特定模式)的识别器,因此我们将研究仅在这种情况下如何管理过渡。 如果您想了解有关连续手势的状态机的更多信息,请查阅Apple的文档。 手势识别器始终以可能的状态开始,这告诉我们已经准备好处理事件。 根据用户的输入,我们可以以失败 (不成功)状态或结束 (成功)状态结束 。 您必须检查用户是否遵循您的模式,并且应与该模式有任何偏差,将状态设置为“失败”。 如果用户确实遵循了预期的模式,则UIKit将调用与目标对象关联的action方法。 当当前事件被系统事件(例如接听电话)打断时,我们也具有取消状态。 您还可以自定义应用中可能发生的取消情况。 这是为了确保我们不会执行用户不希望执行的任务。 实现reset()方法也很重要,该方法将确保我们准备通过返回起始值来处理新的事件序列。 图片来源 自定义手势识别器 要使手势成功,您拥有的条件越多,它将越精确。 对于此示例,我们希望用户仅使用一个手指进行手势,从左到右进行向下笔触,然后从右至左进行向下笔触。 这些条件为边缘情况留下了开放的可能性,但就本示例而言,我们不会对此进行过多研究。 我们要做的是首先创建自定义手势识别器,然后将其添加到我们的视图中。 1.制作自定义手势识别器 创建一个新的swift文件,并导入UIKit和UIKit.UIGestureRecognizerSubclass ,这是一个头文件,定义了实现自定义手势识别器必须重写的方法和属性。 import UIKit import UIKit.UIGestureRecognizerSubclass 在我们的例子中,我们将必须实现touchesBegin , touchesMoved , touchesEnded , touchesCancelled和reset 。 为了跟踪人字形的相位,我们可以使用在自定义手势识别器类之前定义的enum 。 在大多数情况下,您还希望拥有一个notStarted和initialPoint ,然后可以根据自己的手势识别器定义其他阶段。 […]