第一:触控事件的基本概念:
事件是当用户手指触击屏幕及在屏幕上移动时,系统不断发送给应用程序的对象;
系统将事件按照特定的路径传递给可以对其进行处理的对象;
在IOS中,一个UITouch对象表示一个触摸,一个UIEvent对象表示一个事件;
事件对象中包含与当前多点触摸序列相对应的所有触摸对象,还可以提供与特定视图或窗口相关联的触摸对象;
第二:触控的开始,移动和结束:
触摸所包含的信息有时间和空间两方面:
时间方面的信息称为阶段,表示触摸是否刚刚开始,是否正在移动或处于静止状态以及何时结束;
触摸信息还包括当前在视图或窗口中的位置信息,以及之前的位置信息;
当一个手指接触屏幕时,触摸就和某个窗口或视图关联在一起,这个关联在事件的整个生命周期都会得到维护;
第三:触控与多点触控:
当手指接触到屏幕,不管是单点触摸还是多点触摸,事件都会开始,直到用户所有的手指都离开屏幕;
触摸对象UITouch类常用属性:
view:触摸产生时所处的视图,由于视图可能发生变化,当前视图也不一定是最初的视图;
tapCount:轻击操作和鼠标的单价操作类似,tapCount表示短时间内轻击屏幕的次数,因此可以根据tapCount判断单击,双击,或更多的轻击;
phase:触摸事件在屏幕上有一个周期,即触摸开始,触摸点移动,触摸结束,还有中途取消;
触控事件响应链:
所有事件响应的类都实UIResponder的子类,它能接收处理事件。
处理触摸的四个方法:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { //触摸开始 NSLog(@"touchesBegan"); } -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { //触摸移动 NSLog(@"touchesMoved"); } -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { //触摸结束 NSLog(@"touchesEnded"); } -(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event { //如系统决定取消此次触摸,那可能就不调用touchesEnded方法了,在这种情况下会调用touchesCancelled方法 NSLog(@"touchesCancelled"); }
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { //触摸开始 NSLog(@"touchesBegan"); //获取第一次进行手势或轻击 UITouch *touch = [touches anyObject]; //获取某个视图的触摸 UITouch *myTouches = [event touchesForView:self.view]; //获取点击的位置 CGPoint beginPoint = [touch locationInView:self]; }
对应响应链有以下规则:
第一响应者就是响应链的开始;
以UIResponder为父类的任何类都是响应者;
如果第一响应者不处理某个事件,则将该事件传递到响应者链的下一级,一般情况下如果下一级处理,则停止事件的传递;
如果事件通过整个响应者链并且没有对象处理该事件,则丢弃该事件
响应者链传递的顺序总结:
第一响应者几乎总是视图或控件,并且首先对事件进行响应;
如果第一响应者不处理,则传递给其他视图控制器,如果仍不处理则传递给第一响应者的父视图;
如果父视图没有处理,则转给父视图的控制器;
如果一直传递下去而没有环节去处理,则一直传递到应用程序的窗口;
如果窗口不处理,则将传递给应用程序委托,如果应用程序委托不是UIResponder子类或不处理,则事件被丢弃;
如果事件通过整个响应者链并且没有对象处理该事件,则丢弃该事件;
原文:http://www.cnblogs.com/taopengcun/p/3735110.html