- 触摸事件&手势识别
1> 4个触摸事件,针对视图的 2> 6个手势识别(除了用代码添加,也可以用Storyboard添加)
附加在某一个特定视图上的,其中需要注意轻扫手势通常会附加到根视图上。
- 大部分操作,都会在touchesBegan事件中处理,以防夜长梦多!
- touchesEnd事件通常用于处理touchesMoved事件中的收尾工作!
3> 响应者链条,目的是为了让大家能够理解手势触摸事件的传递过程
以下是我自己学习触摸事件&手势识别的小案例,关于ios动画这一块我将不断更新,欢迎关注 .欢迎一起探讨
下面部分是我小案例中的代码,貌似你们看不懂哦!!!
#pragma mark - 开始
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { NSLog(@"touchesBegan %@", touches); }
#pragma mark - 移动
-
(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { NSLog(@"touchesMoved");
// 1. 获取到集合中的触摸对象 UITouch *touch = [touches anyObject]; // 2. 获取手指所在的位置 CGPoint location = [touch locationInView:self.view];
// 根据运行发现,手指第一次移动时,红色视图会出现跳跃的情况,会影响用户的使用 // 1) 取出前一次的手指位置 CGPoint preLocation = [touch previousLocationInView:self.view];
// 2) 计算两次手指之间的距离差值 CGPoint offset = CGPointMake(location.x - preLocation.x, location.y - preLocation.y); // 3) 修正红色视图的中心点 CGPoint center = CGPointMake(_redView.center.x + offset.x, _redView.center.y + offset.y);
// 3. 设置红色视图的位置 self.redView.center = center; }
#pragma mark - 结束
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { NSLog(@"touchesEnded"); }
#pragma mark - 被取消
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event { NSLog(@"此事件不易调试"); }