UITapGestureRecognizer 的用法(轻触手势识别器)

时间:2023-03-09 16:34:46
UITapGestureRecognizer 的用法(轻触手势识别器)

最近在项目中用到了手势操作,键盘回收时还是挺常用的,现在总结下,多谢网络上大神们的分享。

先分享下我在项目中用的代码:

UITapGestureRecognizer * mytap=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tap_gestureRecognizer:)];
[self addGestureRecognizer:mytap];
[mytap release]; //收回键盘
-(void)tap_gestureRecognizer:(UITapGestureRecognizer *)tap_gest
{
[self.scv_stockPriceTextField resignFirstResponder];
[self.scv_stockAmoutTextField resignFirstResponder];
}



//单指单击
UITapGestureRecognizer *singleFingerOne = [[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(handleSingleFingerEvent:)];
singleFingerOne.numberOfTouchesRequired = ; //手指数
singleFingerOne.numberOfTapsRequired = ; //tap次数
singleFingerOne.delegate = self;
//单指双击
UITapGestureRecognizer *singleFingerTwo = [[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(handleSingleFingerEvent:)];
singleFingerTwo.numberOfTouchesRequired = ;
singleFingerTwo.numberOfTapsRequired = ;
singleFingerTwo.delegate = self;
//双指单击
UITapGestureRecognizer *doubleFingerOne = [[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(handleDoubleFingerEvent:)];
doubleFingerOne.numberOfTouchesRequired = ;
doubleFingerOne.numberOfTapsRequired = ;
doubleFingerOne.delegate = self;
UITapGestureRecognizer *doubleFingerTwo = [[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(handleDoubleFingerEvent:)];
doubleFingerTwo.numberOfTouchesRequired = ;
doubleFingerTwo.numberOfTapsRequired = ;
doubleFingerTwo.delegate = self;
//如果不加下面的话,当单指双击时,会先调用单指单击中的处理,再调用单指双击中的处理
[singleFingerOne requireGestureRecognizerToFail:singleFingerTwo];
//同理双指亦是如此
[doubleFingerOne requireGestureRecognizerToFail:doubleFingerTwo];
[self.view addGestureRecognizer:singleFingerOne];
[self.view addGestureRecognizer:singleFingerTwo];
[self.view addGestureRecognizer:doubleFingerOne];
[self.view addGestureRecognizer:doubleFingerTwo];
[singleFingerOne release];
[singleFingerTwo release];
[doubleFingerOne release];
[doubleFingerTwo release];

处理事件的方法,代码: : //处理单指事件
: - (void)handleSingleFingerEvent:(UITapGestureRecognizer *)sender
: {
: if (sender.numberOfTapsRequired == ) {
: //单指单击
: NSLog(@"单指单击");
: }else if(sender.numberOfTapsRequired == ){
: //单指双击
: NSLog(@"单指双击");
: }
: }
: //处理双指事件
: - (void)handleDoubleFingerEvent:(UITapGestureRecognizer *)sender
: {
: if (sender.numberOfTapsRequired == ) {
: //双指单击
: NSLog(@"双指单击");
: }else if(sender.numberOfTapsRequired == ){
: //双指双击
: NSLog(@"双指双击");
: }
: }

将相应代码复制到你的工程中即可使用,由于代码中已经有详细的解释说明,这里就不在重复解释了。

代码中只是列举了单指与双指对于单击或多击的处理,同理多指的操作需修改numberOfTouchesRequired属性,对点击的次数需修改numberOfTapsRequired属性。

对于其他手势例如UISwipeGestureRecognizer,UILongPressGestureRecognizer,UILongPressGestureRecognizer 的操作使用类似处理。

UIKit中包含了UIGestureRecognizer类,用于检测发生在设备中的手势。UIGestureRecognizer是一个抽象类,定义了所有手势的基本行为,它有下面一些子类用于处理具体的手势:

1、拍击UITapGestureRecognizer (任意次数的拍击)  
    2、向里或向外捏UIPinchGestureRecognizer (用于缩放)  
    3、摇动或者拖拽UIPanGestureRecognizer  
    4、擦碰UISwipeGestureRecognizer (以任意方向)  
    5、旋转UIRotationGestureRecognizer (手指朝相反方向移动)  
    6、长按UILongPressGestureRecognizer

对于不同类型的手势识别器,具有不同的配置属性。比如UITapGestureRecognizer,可以配置拍击次数。界面接收到手势之后,可以发送一 个消息,用于处理响应手势动作后的任务。当然,不同的手势识别器,发送的消息方法也会有所不同。