最近在项目中用到了手势操作,键盘回收时还是挺常用的,现在总结下,多谢网络上大神们的分享。
先分享下我在项目中用的代码:
- 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 = 1; //手指数
- singleFingerOne.numberOfTapsRequired = 1; //tap次数
- singleFingerOne.delegate = self;
- //单指双击
- UITapGestureRecognizer *singleFingerTwo = [[UITapGestureRecognizer alloc] initWithTarget:self
- action:@selector(handleSingleFingerEvent:)];
- singleFingerTwo.numberOfTouchesRequired = 1;
- singleFingerTwo.numberOfTapsRequired = 2;
- singleFingerTwo.delegate = self;
- //双指单击
- UITapGestureRecognizer *doubleFingerOne = [[UITapGestureRecognizer alloc] initWithTarget:self
- action:@selector(handleDoubleFingerEvent:)];
- doubleFingerOne.numberOfTouchesRequired = 2;
- doubleFingerOne.numberOfTapsRequired = 1;
- doubleFingerOne.delegate = self;
- UITapGestureRecognizer *doubleFingerTwo = [[UITapGestureRecognizer alloc] initWithTarget:self
- action:@selector(handleDoubleFingerEvent:)];
- doubleFingerTwo.numberOfTouchesRequired = 2;
- doubleFingerTwo.numberOfTapsRequired = 2;
- 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];
处理事件的方法,代码:- 1: //处理单指事件
- 2: - (void)handleSingleFingerEvent:(UITapGestureRecognizer *)sender
- 3: {
- 4: if (sender.numberOfTapsRequired == 1) {
- 5: //单指单击
- 6: NSLog(@"单指单击");
- 7: }else if(sender.numberOfTapsRequired == 2){
- 8: //单指双击
- 9: NSLog(@"单指双击");
- 10: }
- 11: }
- 12: //处理双指事件
- 13: - (void)handleDoubleFingerEvent:(UITapGestureRecognizer *)sender
- 14: {
- 15: if (sender.numberOfTapsRequired == 1) {
- 16: //双指单击
- 17: NSLog(@"双指单击");
- 18: }else if(sender.numberOfTapsRequired == 2){
- 19: //双指双击
- 20: NSLog(@"双指双击");
- 21: }
- 22: }
将相应代码复制到你的工程中即可使用,由于代码中已经有详细的解释说明,这里就不在重复解释了。
代码中只是列举了单指与双指对于单击或多击的处理,同理多指的操作需修改numberOfTouchesRequired属性,对点击的次数需修改numberOfTapsRequired属性。
对于其他手势例如UISwipeGestureRecognizer,UILongPressGestureRecognizer,UILongPressGestureRecognizer 的操作使用类似处理。
UIKit中包含了UIGestureRecognizer类,用于检测发生在设备中的手势。UIGestureRecognizer是一个抽象类,定义了所有手势的基本行为,它有下面一些子类用于处理具体的手势:
1、拍击UITapGestureRecognizer (任意次数的拍击)
2、向里或向外捏UIPinchGestureRecognizer (用于缩放)
3、摇动或者拖拽UIPanGestureRecognizer
4、擦碰UISwipeGestureRecognizer (以任意方向)
5、旋转UIRotationGestureRecognizer (手指朝相反方向移动)
6、长按UILongPressGestureRecognizer
对于不同类型的手势识别器,具有不同的配置属性。比如UITapGestureRecognizer,可以配置拍击次数。界面接收到手势之后,可以发送一 个消息,用于处理响应手势动作后的任务。当然,不同的手势识别器,发送的消息方法也会有所不同。