iOS学习笔记(5):UITouch&UIEvent

  • 当用户触摸屏幕时, 会创建一个与手指相关关联的UITouch对象
  • 一个手指对应一个UITouch对象

UITouch作用

  • 保存着跟手指相关的信息,比如触摸的位置、时间、阶段
  • 当手指移动时,系统会更新统一个UITouch对象,使之能够一直保存该手指在的触摸位置
  • 当手指离开屏幕时,系统会销毁相应的UITouch对象

UITouch的属性

// 触摸产生时所处的窗口
@property(nonatmoic, readonly, retain) UIWindow *window;
// 触摸产生时所处的视图
@property(nonatmoic, readonly, retain) UIView *view;
// 短时间内点按屏幕的次数, 可以根据tapCount判断单击、双击或更多的点击
@property(nonatmoic, readonly) NSUInteger tapCount;
// 记录了触摸事件产生或变化时的时间,单位是秒
@property(nonatomic, readonly) NSTimeInterval timestamp;
// 当前触摸事件所处的状态
@property(nonatomic, readonly) UITouchPhase phase;

UITouch的方法

// 返回值表示触摸在view上的位置
// 这里返回的位置是针对view的坐标系的(以view的左上角为原点(0,0))
// 调用时传入的view参数为nil的话,返回的是触摸点在UIWindow的位置
- (CGPoint)locationInView:(UIView *)view;
// 该方法记录了前一个触摸点的位置
- (CGPoint)previousLocationInView:(UIView *)view;

view的拖拽

 // 让当前控件随着手指移动而移动
 // 获取UITouch
 UITouch *touch = [touches anyObject];
 // 获取当前点
 CGPoint curP = [touch locationInView:self];
 // 获取上一个点
 CGPoint preP = [touch previousLocationInView:self];
 // 计算手指x轴偏移量
 CGFloat offsetX = curP.x - preP.x;
 // 计算手指x轴偏移量
 CGFloat offsetY = curP.y - preP.y;
 // 修改控件的形变
 self.transform = CGAffineTransformTranslate(self.transform, offsetX, offsetY);

UIEvent

  • 称为事件对象,记录事件产生的时刻和类型

常见属性

// 事件类型
@property(nonatomic, readonly) UIEventType type;
@property(nonatomic, readonly) UIEventSubtype subtype;
// 事件产生的时间
@property(nonatomic, readonly) NSTimeInterval timestamp;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文来自:http://ios.jobbole.com/84081/ 前言: 按照时间顺序,事件的生命周期是这样的...
    HackerOnce阅读 2,858评论 1 10
  • 在iOS开发中经常会涉及到触摸事件。本想自己总结一下,但是遇到了这篇文章,感觉总结的已经很到位,特此转载。作者:L...
    WQ_UESTC阅读 6,090评论 4 26
  • 好奇触摸事件是如何从屏幕转移到APP内的?困惑于Cell怎么突然不能点击了?纠结于如何实现这个奇葩响应需求?亦或是...
    Lotheve阅读 57,851评论 51 603
  • 触摸事件iOS中的事件:在用户使用app过程中,会产生各种各样的事件。iOS中的事件可以分为3大类型 view的触...
    念念不忘一个丫头的容阅读 274评论 0 0
  • 昨晚我哭的很伤心,不是和男友吵架,也不是工作上的事,而是一肚子积累的委屈和无奈以及渺茫。我看到男友11点多了还在一...
    孤独不离阅读 262评论 3 0