iOS_UITouch 事件

UITouch 基本事件函数

UITouch 包含如下四个基本函数,touches 集合中存储的事UITouch 的集合,UITouch包含了触摸所在的窗口、视图、当前点击位置、上一次点击位置。

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event;
- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event;
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event;
- (void)touchesCancelled:(nullable NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event;

在编写代码的时候,可以通过设置是否接受用户交互和多点触摸

[self.view setUserInteractionEnabled:YES];
[self.view setMultipleTouchEnabled:YES];

获取 UITouch 对象

UITouch *touch = [touches anyObject];

移动的偏移量

- (void) touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{

UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInView:self.view];
CGPoint preLocation = [touch previousLocationInView:self.view];
CGPoint offset = CGPointMake(location.x - preLocation.x, location.y - preLocation.y);

}

响应者链条

当用户点击屏幕时,会产生一个 UITouch 对象,传递给 UIApplication,然后由 window 负责查找最合适响应触摸事件的对象。由 window 以递归的方式调用界面上的所有视图的 hitTest 方法。找到合适的视图之后,Touch 方法由对应的视图去完成,上级视图不再接管。

  • UIResponder 有一个 nextResponder 属性,通过该属性可以组成一个响应者链,事件或消息在其路径上进行传递;
  • 如果UIResponder 没有处理传给它的事件,会讲未处理的消息发给它自己的 nextResponder;
  • 事件最终被传递给 UIapplication 对象;
  • 如果没有配置任何对象来处理事件,该事件被丢弃。

UI View 不接收处理事件的三种情况

  • userInteractionEnabled = NO;
  • hidden = YES;
  • alpha = 0-0.01;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 好奇触摸事件是如何从屏幕转移到APP内的?困惑于Cell怎么突然不能点击了?纠结于如何实现这个奇葩响应需求?亦或是...
    Lotheve阅读 58,621评论 51 604
  • 在iOS开发中经常会涉及到触摸事件。本想自己总结一下,但是遇到了这篇文章,感觉总结的已经很到位,特此转载。作者:L...
    WQ_UESTC阅读 6,180评论 4 26
  • 1. iOS中的事件基本介绍 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并...
    xx_cc阅读 11,985评论 4 32
  • 转载自简书:http://www.jianshu.com/p/3e3a62b131f5 做电商搜索页面的时候,热门...
    程序员进阶阅读 292评论 0 1
  • iOS中有三类事件:UIEventTypeTouches触摸事件、 UIEventTypeMotion “动作”事...
    WeiHing阅读 37,207评论 7 69