首页 > 代码库 > iOS开发UI篇—手势识别器(敲击)
iOS开发UI篇—手势识别器(敲击)
iOS开发UI篇—手势识别器(敲击)
如果想监听一个view上面的触摸事件,之前的做法通常是:先自定义一个view,然后再实现view的touches方法,在方法内部实现具体处理代码
通过touches方法监听view触摸事件,有很明显的几个缺点
(1)必须得自定义view
(2)由于是在view内部的touches方法中监听触摸事件,因此默认情况下,无法让其他外界对象监听view的触摸事件(需要通过代理)
(3)不容易区分用户的具体手势行为
iOS 3.2之后,苹果推出了手势识别功能(Gesture Recognizer),在触摸事件处理方面,大大简化了开发者的开发难度
二、手势识别器
为了完成手势识别,必须借助于手势识别器----UIGestureRecognizer
利用UIGestureRecognizer,能轻松识别用户在某个view上面做的一些常见手势
UIGestureRecognizer是一个抽象类,定义了所有手势的基本行为,使用它的子类才能处理具体的手势
UITapGestureRecognizer(敲击)
UIPinchGestureRecognizer(捏合,用于缩放)
UIPanGestureRecognizer(拖拽)
UISwipeGestureRecognizer(轻扫)
UIRotationGestureRecognizer(旋转)
UILongPressGestureRecognizer(长按)
三、敲击
每一个手势识别器的用法都差不多,比如UITapGestureRecognizer的使用步骤如下:
(1)创建手势识别器对象
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init];
(2)设置手势识别器对象的具体属性
// 连续敲击2次
tap.numberOfTapsRequired = 2;
// 需要2根手指一起敲击
tap.numberOfTouchesRequired = 2;
(3)添加手势识别器到对应的view上
[self.iconView addGestureRecognizer:tap];
(4)监听手势的触发
[tap addTarget:self action:@selector(tapIconView:)];
属性介绍:
numberOfTouchesRequired //需要多少根手指一起敲击(默认为1根)
numberOfTapsRequired //需要敲击多少下(默认为1)
四、实现代码
1 // 2 // YYViewController.m 3 // 02-手势识别器(敲击) 4 // 5 // Created by apple on 14-6-18. 6 // Copyright (c) 2014年 itcase. All rights reserved. 7 // 8 9 #import "YYViewController.h"10 11 @interface YYViewController ()12 @property (weak, nonatomic) IBOutlet UIImageView *iconView;13 14 @end15 16 @implementation YYViewController17 18 - (void)viewDidLoad19 {20 [super viewDidLoad];21 //0.设置imageview为可交互的22 self.iconView.userInteractionEnabled=YES;23 // //1.创建手势识别器24 // UITapGestureRecognizer *tap=[[UITapGestureRecognizer alloc] init];25 // //2.设置手势识别器的具体属性26 // //设置敲击的次数为双击(默认为单击)27 // tap.numberOfTapsRequired=2;28 // //设置需要一根手指敲击(默认)29 // tap.numberOfTouchesRequired=1;30 // //3.把手势识别器添加到对应的view上31 // [self.iconView addGestureRecognizer:tap];32 // //4.监听手势的触发事件33 // [tap addTarget:self action:@selector(tapView)];34 35 [self.iconView addGestureRecognizer:[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapView)]];36 }37 -(void)tapView38 {39 NSLog(@"被点击了");40 }41 42 43 @end