触摸事件01
这篇文章讲一些触摸事件的基本知识和两个简单的案例供参考
1. 移动uiview
2. 根据移动绘制星星
移动UIview的案例
可识别的三类输入事件
- 触摸事件
- 运动(加速计)事件
- 远程控制事件
触摸事件:指的是单点和多点触摸事件
运动(加速计):例如微信的摇一摇事件
远程控制:例如耳机线空歌曲(播放,暂停)
响应者对象
在ios开发中并不是所有的对象都能处理触摸事件,只有继承了UIResponder的对象才能处理和接收触摸事件。我们称之为响应者对象
四个不同的方法处理触摸事件
touchesBegin、touchesMoved 、touchesEnd、touchesCanceled(这四个方法都有 touches和event参数)
- touchesBegin:触摸时间开始
- touchesMoves:触摸事件的移动事件
- tocuhesEnd:触摸事件的结束事件
- touchesCanceled:触摸事件被取消,比如正在触摸时电话打进来,此时触摸会被取消。
UITouch类中包含的两个成员函数:
*- (CGPoint) locationInView:(UIView *)view 针对view的坐标系
*-(CGPoint) previousLocationInView:(UIView *)view 记录前一个坐标
实现效果
主要代码
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"touchesMoves%@",touches);
//1.从nsset中去除uitouch对象
//取出集合的一个对象,通常实在单点触摸时
UITouch *touch = [touches anyObject];
//2.知道手指触摸的位置
CGPoint location = [touch locationInView:self.view];
//2.1 对位置进行修正 使用previousLocationInView对位置进行修正
CGPoint plocation = [touch previousLocationInView:self.view];
CGPoint deltaP = CGPointMake(location.x - plocation.x, location.y-plocation.y);
//3.设置红色视图的位置
CGPoint newCenter = CGPointMake(self.redView.center.x +deltaP.x, self.redView.center.y+deltaP.y);
[self.redView setCenter:newCenter];
}
中间的修正部分为 防止 第一次移动时的跳动问题,算出相对的专心点
第二个绘制轨迹的案例
实现效果
这个案例主要是多点触控
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
NSInteger i = 0;
//遍历touches集合 来添加图像
for (UITouch *touch in touches) {
UIImageView * imageView = [[UIImageView alloc]initWithImage:self.images[i]];
CGPoint location = [touch locationInView:self.view];
[imageView setCenter:location];
[self.view addSubview:imageView];
[UIView animateWithDuration:2.0f animations:^{
[imageView setAlpha:0.5f];
}completion:^(BOOL finished) {
[imageView removeFromSuperview];
}];
i++;
}
NSLog(@"%@",touches);
}
谢谢........
write by Seven