iOS触摸和手势

多触摸

1.手势:指当一个手指或者多个手指开始点触屏幕开始,直到手势离开手机屏幕之间发生的所有事件。
苹果规定,无论这个过程耗时多长,只要还有手指停留在屏幕上,就处于某个手势之中,除非发生意外情况。

2.触摸:指手指放在屏幕上,手势中设计的触摸数量就是屏幕上的手指数量。

3.手势如何处理的:手势沿着响应者链传递,并且嵌入到事件中。一般需要把代码嵌入在UIView的子类中,也可以放在UIViewController中。对于放在UIView中还是UIViewController中,有个原则:如果视图需要根据用户的触摸来对自己执行某些动作,那么代码就应该写在UIView中;如果对多个对象产生影响,就应该写在UIViewController中。


响应者链

1.当我们在屏幕上完成某个手势后,系统是怎么获取的?首先要直到手势在事件之内传递到系统的,然后事件会传递到相应者链。

一。相应者对象

1.响应者就是响应事件并对其进行处理的对象,而第一响应者就是负责接收事件的响应者对象,第一响应者就是响应者链的开始。

2.UIResponder是所有响应者对象的基类,它不仅处理事件,而且也为常见的响应者行为定义编程接口。UIApplication、UIView和所有从UIView派生出来的UIKit类(包括UIWindow)都直接或者间接地继承自UIResponder类。UIView继承自UIResponder,UIControl继承自UIView。

3.第一响应者往往首当其冲和用户进行交互,它通常是一个UIView对象。如果第一响应者没有进行处理,系统将事件(通过消息)传递给响应者链中的下一个响应者,看看它是否可以进行处理。

二。响应者链

1.用户对屏幕的所有操作都可成为事件,当用户手指触击屏幕及在屏幕上移动时,系统会不断把事件对象发送给应用程序。

2.响应者链处理事件的几个原则

  • 第一位处理:第一响应者收到用户的动作后,事件或动作消息会传递给它的UIView或者UIViewController
  • 传递处理:如果一个UIView或者UIViewController不能处理这个事件或动作消息,它将传递给视图的父视图,如果依然不能处理,那么会沿着视图层次结构继续前进,传递给后续的父视图。
  • UIWindow处理:如果最顶层的视图也不能处理这个事件或动作消息,那么就传递给UIWindow对象来处理。
  • UIApplication处理:如果UIWindow对象也不能处理,就传递给应用程序对象UIApplication。到最后发现应用程序对象也不能处理这个事件或动作消息,系统会抛弃不处理

  • 4个触摸通知方法

    1.要对触摸事件作出处理,一般需要重写UIResponder类中定义的事件处理函数,一般共有4个函数,系统根据不同的触摸状态通知相应者当前的触摸情况,然后再从程序里会调用对应的函数。

    2.UIResponder中4个触摸通知方法:

    触摸开始:- (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;
        其中,参数touches:表示触摸产生的所有UITouch对象
             参数event:表示特定的事件
    

    3.UITouch:触摸类

  • 获取手指数量:[touches count]

    UITouch就是触摸对象,一个UITouch表示一个手指正在触摸屏幕,touches中元素的个数就是当前按压屏幕的手指数量。
  • 获取轻击数量:@property(nonatomic,readonly) NSUInteger tapCount;

    如果该触摸是一系列轻击的一部分,则可以通过任意的UITouch对象查询轻击数量。
  • 获取手指位置:- (CGPoint)locationInView:(UIView *)view;

    每个手指在屏幕上都有各自的位置,可以通过UITouch对象来查询特定手指的位置:[touch locationInView:self.view]
  • 获取上一次触摸位置:- (CGPoint)previousLocationInView:(UIView *)view;


    4.UIEvent:事件类
  • 获取所有的触摸对象:- (NSSet *)allTouches;
  • 获取任意一个触摸对象:
    [[event allTouches] anyObject]

  • 手势识别

    一。UIGestureRecognizer类

    1.UIGestureRecognizer是一个抽象类,定义了所有手势的基本行为,它包含一系列子类,每个子类都用于识别指定的手势,其子类主要有以下几种:

  • UITapGestureRecognizer:轻击手势,可以判断单击、双击动作。
  • UIPinchGestureRecognizer:捏合手势,缩放视图或改变视图某些视图控件大小时会用到该手势


    2.手势识别器状态:是一个枚举值。UIGestureRecognizerState
  • 触摸开始:UIGestureRecognizerStateBegan
  • 触摸结束:UIGestureRecognizerStateEnded
  • 二。UITapGestureRecognizer:轻击手势类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值