
100
|
第
3
章
}
}
}
讨论
创建一个自定义手势识别器的第一步是导入
UIGestureRecognizerSubclass.h
头文
件。在这个头文件中,将
UIGestureRecognizer
类的
state
属性重新定义为可读写
属性,因此我们就可以在子类中修改
state
属性。接下来的事情就非常简单了,例
如监听触摸事件,根据手指的移动来改变
state
属性。
手势识别器利用
touchesBegan
、
touchesMoved
、
touchesEnded
以及
touchesCancelled
方法来识别触摸(这和
UIView
是完全一样的)。其实手势识别
器的作用就是跟踪一切有用的信息,并据此来修改手势的状态。
手势识别器不会直接与目标对象打交道;它仅仅会修改
state
属性的值,这些
state
值会用来表示手势的开始、更新、结束、取消等状态。
一旦手势识别器识别出某个手势,它的
state
属性会立即变成
UIGestureRecognizerStateBegan
。同时手势识别系统会向目标对象发送消息。同样,
当手势识别器感知到手势发生了变化,它会将
state
属性更新为
changed
。
手势识别器的一个重要状态是
failed
,即“失败”。对于复杂手势来说,很可能
识别器已经识别出的手势最终演变成它所不能识别的手势。例如,当拖拽手势识别
器在屏幕上发现了一个轻触动作,它可能认为这是一个拖拽手势的开始,但其实未
必,除非这个触摸接下来开始移动。如果这个触摸很快就离开了,拖拽手势识别器
就会改变到失败状态。如果是这样,就会允许其他手势识别器继续识别。 ...