深入理解手势识别器:原理、应用与冲突解决
1. 手势识别器的诞生背景
在处理视图的触摸事件时,若视图仅期望处理一种手势(如拖动),编写和维护一个解释触摸事件的状态机就已经颇具难度。而当视图需要接受并对不同类型的手势做出不同响应时,情况会变得更加复杂。此外,许多手势类型是通用且标准的,要求每个开发者独立设计响应这些通用手势的方式显然不合理。
为了解决这些问题,手势识别器应运而生。它将常见手势标准化,并允许将不同手势的代码分离并封装到不同对象中。借助手势识别器,我们无需仅仅为了实现触摸分析而对 UIView
进行子类化。
2. 手势识别器类概述
手势识别器是 UIGestureRecognizer
的子类,其主要任务是检测多点触摸序列是否等同于特定类型的手势。它可以通过 addGestureRecognizer(_:)
和 removeGestureRecognizer(_:)
方法附加到 UIView
上,并且 UIView
有一个 gestureRecognizers
属性来管理这些手势识别器。
虽然 UIGestureRecognizer
实现了四个触摸方法,但它并非响应者( UIResponder
),因此不参与响应者链。不过,当新的触摸事件传递到视图时,若该视图及其上级视图有手势识别器,触摸事件也会与之关联并传递给它们。所以,手势识别器在视图层次结构中的位置很重要,