美文网首页
iOS GestureRecognizer与UIResponde

iOS GestureRecognizer与UIResponde

作者: taosiyu | 来源:发表于2018-07-30 09:48 被阅读66次

    在iOS中UIView是继承于UIResponder的,而UIResponder是专门用来响应用户的操作处理各种事件的,包括触摸事件(Touch Events)、运动事件(Motion Events)、远程控制事件(Remote Control Events,如插入耳机调节音量触发的事件),而很多我们常用的类也继承于UIResponder(UIApplication、UIView、UIViewController).

    而以下几个方法

    @interface UIResponder : NSObject
    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;//触摸屏幕
    - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;//在屏幕上移动
    - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;//离开屏幕
    - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;
    

    是响应触摸事件的方法,我们可以利用这几个方法自定义自己的手势。当然Apple也为我们提供了几个基础的封装的手势提供使用(了UIGestureRecognizer手势识别)

    这里并不深入研究手势的响应和传递,而是研究下几个基础的手势和touchs的关系,这里主要利用这几个内置的手势方法:

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapEvent:)];
    [self addGestureRecognizer:tap];//点击
    
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(tapEvent:)];
    [self addGestureRecognizer:pan];//平移,慢速移动
    
    UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(tapEvent:)];//滑动,快速移动
    [self addGestureRecognizer:swipe];
    
    UILongPressGestureRecognizer *longG = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(tapEvent:)];//长按
    [self addGestureRecognizer:longG];
    
    屏幕快照 2018-07-30 上午9.19.35.png

    蓝色部分就是需要添加手势的view,我们分别添加上述的手势进行测试,同时实现touchs触摸相关方法

    屏幕快照 2018-07-30 上午9.39.21.png

    首先是UITapGestureRecognizer的方法执行顺序

    屏幕快照 2018-07-30 上午9.21.30.png

    很容易理解,因为只是tap单击事件,所以在检测到begin touch时手势事件就开始响应,同时并不会有move动作

    然后是UIPanGestureRecognizer

    屏幕快照 2018-07-30 上午9.22.03.png

    pan手势是检测move的,所以在touch move有响应时,pan手势也进行响应

    UISwipeGestureRecognizer

    屏幕快照 2018-07-30 上午9.23.14.png

    UILongPressGestureRecognizer

    屏幕快照 2018-07-30 上午9.23.34.png

    通过以上测试表明系统内置的手势事件是对UIResponder touch事件的监测封装,通过不同的计算得出是否触发了某个手势,而根据不同的手势,触发的时机也不同。通过UIResponder,我们也可以自定义自己的手势,通过模拟系统手势很容易就能实现.

    相关文章

      网友评论

          本文标题:iOS GestureRecognizer与UIResponde

          本文链接:https://www.haomeiwen.com/subject/yasrjftx.html