您的位置:首页 > 移动开发 > IOS开发

IOS手势识别

2015-12-10 17:41 387 查看
1.响应者链的事件传递过程
(1)如果view的控制器存在,就传递给控制器;如果控制器不存在,则将其传递给它的父视图。
(2)在视图层次结构的最顶级视图,如果也不能处理收到的事件或消息,则其将事件或消息传递给window对象进行处理。
(3)如果window对象也不处理,则其将事件或消息传递给UIApplication对象。
(4)如果UIApplication也不能处理该事件或消息,则将其丢弃。

2. UIGestureRecognizer
如果想监听一个view上面的触摸事件,之前的做法是:
(1)自定义一个view。
(2)实现view的touches方法,在方法内部实现具体处理代码。
通过touches方法监听view触摸事件,有很明显的几个缺点:
(1)必须得自定义view。
(2)由于是在view内部的touches方法中监听触摸事件,因此默认情况下,无法让其他外界对象监听view的触摸事件。
(3)不容易区分用户的具体手势行为。
iOS 3.2之后,苹果推出了手势识别功能(Gesture Recognizer),在触摸事件处理方面,大大简化了开发者的开发难度。
为了完成手势识别,必须借助于手势识别器----UIGestureRecognizer,利用UIGestureRecognizer,能轻松识别用户在某个view上面做的一些常见手势,
UIGestureRecognizer是一个抽象类,定义了所有手势的基本行为,使用它的子类才能处理具体的手势:
(1)UITapGestureRecognizer(敲击)

(2)UIPinchGestureRecognizer(捏合,用于缩放)

(3)UIPanGestureRecognizer(拖拽)

(4)UISwipeGestureRecognizer(轻扫)

(5)UIRotationGestureRecognizer(旋转)

(6)UILongPressGestureRecognizer(长按)


代码:为一个view添加一个事件(两个手指点击两次才会触发)

#import "ViewController.h"

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIView *grayView;

@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)];
tap.numberOfTapsRequired = 2;// 设置点击次数:默认为1
tap.numberOfTouchesRequired = 2; // 设置点击的手指个数
[self.grayView addGestureRecognizer:tap];

}

- (void)tap:(UITapGestureRecognizer *)tapGesture
{
NSLog(@"用两个手指点击了两次");
}

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: