iOS学习之——多点触碰

来源:互联网 发布:centos输入法下载安装 编辑:程序博客网 时间:2024/06/06 00:43

一、响应者链
只要继承了UIResponder的对象就可作为事件的响应者,实际上UIControl继承了UIView,UIView又继承了UIResponder,即所有的对象都可作为事件的响应者。
当用户与某个空间交互时,该空间将作为”第一响应者(First Responder)”,第一响应者将作为响应者链的开始,该事件首先被发送给第一响应者(也就是用户触摸屏幕的控件)。事件将沿着响应者链一直向下传播,直到被某个响应者处理。
事件响应者链的典型传播路线为:
First Responder ——>First Responder的视图控制器(如果有)——>父容器(如果有)——>父容器的视图控制器(如果有)——>UIWindow ——>UIApplication ——>应用程序委托对象
如果某个事件经过上面完整的传播过程,依然没有被处理,那么该事件就会被丢弃。一般来说,上面响应者链的任何响应者处理该事件,该事件就会停止传播。
如果某个响应者”截获”了某个时间,那么该响应者要根据条件决定是否处理该事件。当响应者无法处理该事件时,则需要在处理方法中手动传递该事件。
eg:

-(void)handleTapEvent:(UIEvent *)event{   if(condition)   {       //处理事件   }   else   {       [self.nextResponder handleTapEvent:event];   }}

二、响应触摸方法
UIResponder的4个方法可以让自定义控件响应用户的触碰事件:

-touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event: //当用户手指开始接触控件或窗口事件时激发该方法-touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event: //当用户手指在控件上移动时激发该方法-touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event: //当用户手指结束触碰控件时激发该方法-touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event: //当系统事件(比如内存低事件)中止了触碰事件时激发该方法

如果希望用户在控件上按下手指激发响应的事件,则可通过重写如下方法来实现:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{   NSUInteger fingersNum = [touches count];   NSUInteger tapCount = [[touches anyObject] tapCount]   ...}

重写这些触碰事件处理方法时,第一个NSSet类型的参数代表了用户同时触碰控件的多个手指,如果该用户用3个手指触碰了控件,那么该touches参数中将会包含3个UITouch对象。
UITouch对象代表一个触碰事件,该对象提供了一个tapCount属性,该属性用于返回用户触碰屏幕的次数,比如用户只是轻轻触碰屏幕一次,那么该属性将会返回1.如果该属性返回3,则代表用户快速触碰了3次屏幕。如果touches集合包含3个元素,而且tapCount属性返回3,就代表用户使用了3个手指触碰了3次控件。除此之外,UITouch还提供了locationInView:方法来获取该触碰时间在UIView控件中的触碰位置。
三、使用手势处理器(UIGestureRecognizer)
详见:http://blog.csdn.net/yxys01/article/details/51595260

0 0