第
iOS之识别手势gesture的介绍
在iOS中,你可以使用系统内置的手势识别(GestureRecognizer),也可以创建自己的手势.GestureRecognizer将低级别的转换为高级别的执行行为,是你绑定到view的对象,当发生手势,绑定到的view对象会响应,它确定这个动作是否对应一个特定的手势(swipe,pinch,pan,rotation).如果它能识别这个手势,那么就会向绑定它的view发送消息,如下图
UIKit框架提供了一些预定义的GestureRecognizer.包含下列手势
UITapGestureRecognizer敲击手势(单击和双击)
UIPanGestureRecognizer(拖动手势)
UIPinchGestureRecognizer(缩放手势)
UISwipeGestureRecognizer(擦碰手势)
UIRotationGestureRecognizer(旋转手势)
UILongPressGestureRecognizer(长按手势)
如果你想让你的应用程序来识别一个独特的手势,如选择目录或纠结的运动,你可以创建自己的自定义GestureRecognizer,将在下篇介绍
将特定的手势和view相关联
每一个特定的手势必须关联到view对象中才会有作用,一个view对象可以关联多个不同的特定手势,但是每一个特定的手势只能与一个view相关联。当用户触摸了view,这个GestureRecognizer就会接受到消息,它可以响应特定的触摸事件。
与特定view关联
创建GestureRecognizer实例
addGestureRecognizer
实现处理手势的方法
可以使用removeGestureRecognizer:来移除手势。
_panGestureRecognizer=[[UIPanGestureRecognizeralloc]initWithTarget:selfaction:@selector(handlerPanGesture:)];
_panGestureRecognizer.delegate=self;
_panGestureRecognizer.maximumNumberOfTouches=2;
_panGestureRecognizer.minimumNumberOfTouches=2;
[self.viewaddGestureRecognizer:_panGestureRecognizer];
-(void)handlerPanGesture:(UIPanGestureRecognizer*)recognizer
if((recognizer.state==UIGestureRecognizerStateBegan)||
(recognizer.state==UIGestureRecognizerStateChanged))
CGPointoffset=[recognizertranslationInView:self.view];
CGRectframe=self.rightViewController.view.frame;
frame.origin.x+=offset.x;
if(frame.origin.x=0frame.origin.x
手势识别状态
Gesturerecognizers从一个状态转到另一状态(state)。对于每个状态,根据它们是否符合特定条件来决定时候可以移动到下一个状态。它们分析多点触摸。是否识别失败。未能识别手势意味着state转换失败。UIGestureRecognizerStateFAIled。详见UIGestureRecognizerState枚举
typedefNS_ENUM(NSInteger,UIGestureRecognizerState){
UIGestureRecognizerStatePossible,//therecognizerhasnotyetrecognizeditsgesture,butmaybeevaluatingtouchevents.thisisthedefaultstate
UIGestureRecognizerStateBegan,//therecognizerhasreceivedtouchesreco