在IOS中,触摸表示手指在屏幕上的接触或移动并作为唯一多点触摸序列的一部分。当手指触摸屏幕并在上面移动的时候,系统持续的发送这些触摸事件对象给应用程序。在触摸序列中,事件为所有触摸提供了快照,最重要的触摸为新收到的或在特定视图中改变的。多触摸序列从第一个手指触摸到屏幕开始,其他的手指可能接下来再触摸屏幕,并且所有在屏幕上的手指进行移动,当最后一个手指离开屏幕时序列结束。
触摸,用
UITouch对象来表示,包括触摸阶段和触摸位置。
触摸阶段,指示什么时候触摸开始,是否移动和什么时候触摸结束——即合适最后一根手指离开屏幕。
触摸位置表示与触摸相关联的对象即触摸点在对象的内部。当手指触摸到屏幕,触摸就与窗口和视图相关联,关联关系一直维持到事件结束。如果多点触摸同时到达,当它们所关联的视图相同时则进行统一处理。否则,如果两个触摸在同一个视图以上很快的速度先后到达,则被认为是多次点击。触摸对象报错触摸的位置及上次触摸位置(如果存在)在它所对应的窗口或视图中。
触摸事件的处理方法:
应用程序在一个给定的触摸阶段当有新的触摸或改变的触摸时发送这些消息:
-(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 //触摸被打断时候触发该函数
看到这里,上面的东西估计各位也没记住多少!还是实际点演示代码实在,接下里有图有真相!下面的代码实现的是在屏幕上画线条的功能!
首先我们知道线和点的关系,一条线可以是由一系列的点组成的。所有我们在屏幕上画线就相当于在屏幕上点了很多点,这些点是相连着的。
首先在
.h文件里面声明一个可变数组来接纳手指画出来的所有点。
@property(retain,nonatomic)NSMutableArray*pointArray;
然后在.m文件实现触摸
//================
触摸开始触发该函数
================
//集合对象touches代表触点
-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
self.pointArray=[[NSMutableArray alloc]init];//每次都新创建一个点数组,相当于从新开始
UITouch *touch=[touches anyObject];//获取到触摸对象
CGPoint pt=[touch locationInView:self];//获取到触摸所对应视图的位置
[self.pointArray addObject:[NSValue valueWithCGPoint:pt]];//触点放入数组 NSValue将C结构CGPoint转换为OC的NSValue类型对象
}
//================触摸移动触发该函数================
-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch=[touches anyObject];//获取到触摸对象
CGPoint pt=[touch locationInView:self];//获取到触摸所对应视图的位置
[self.pointArray addObject:[NSValue valueWithCGPoint:pt]];//触点放入数组
[self setNeedsDisplay]; //重绘界面 自动调用drawRect方法
}
//================触摸结束触发该函数================
-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"%d",self.pointArray.count); //输出你的手指经过了多少个点
}
//================触摸被打断时候触发该函数================
-(void)touchesCancelled:(NSSet*)touches withEvent:(UIEvent *)event
{
//此处可以设置当触摸被另一个系统事件(来电等)打断时候执行的事件
}