iOS实现拖拽

UIView的触摸事件处理

  • 一根或者多根手指开始触摸view,系统会自动调用view的下面方法

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;

  • 一根或多根手指在view上移动,系统会自动调用view的下面方法(随着手指的移动持续调用该方法)

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;

  • 一根或者多根手指离开view,系统会自动调用view的下面方法

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;

  • 触摸结束前,某个系统事件(例如电话呼入)会打断触摸过程,系统会自动调用下面的方法

-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;

UITouch

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

UITouch的作用

  • 保存着跟手指相关的信息,比如触摸的位置、时间、阶段
  • 当手指移动时,系统回更新同一个UITouch对象,使之能够一直保存该手指在的触摸位置
  • 当手指离开屏幕时,系统回销毁相应的UITouch对象
  • 提示:iPhone开发中,要避免使用双击事件!

UITouch的属性

  • 触摸产生时所处的窗口

@property(nonatomic,readonly,retain) UIWindow *window;
 

触摸产生时所处的视图


@property(nonatomic,readonly,retain) UIView *view;

短时间内点按屏幕的次数,可以根据tapCount判断单击、双击或更多的点击


@property(nonatomic,readonly) NSUInteger tapCount;

记录了触摸事件产生或变化时的时间,单位是秒


@property(nonatomic,readonly) NSTimeInterval timestamp;

当前触摸事件所处的状态


@property(nonatomic,readonly) UITouchPhase phase;

UITouch的方法


- (CGPoint)locationInView:(UIView *)view;

返回值表示触摸在view上的位置
这里返回的位置是针对view的坐标系的(以view的左上角为原点(0, 0))
调用时传入的view参数为nil的话,返回的是触摸点在UIWindow的位置


- (CGPoint)previousLocationInView:(UIView *)view;

该方法记录了前一个触摸点的位置

实际运用部分代码


- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    NSLog(@"%s", __func__);
    //  做UIView拖拽
    UITouch *touch = [touches anyObject];
    
    //  求偏移量 = 手指当前点的X - 手指上一个点的X
    CGPoint curP = [touch locationInView:self.view];
    
    self.heartView.center = curP;
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.ios当中常用的事件分为三种: 触摸事件加速计事件远程控制事件 2.什么是响应者对象? 继承了UIRespon...
    越天高阅读 4,097评论 0 0
  • 如何在 iOS 应用上用自定义视图实现星级评分功能呢?最近研究学习了两个实现方法,现总结如下: 一、实现方式一 参...
    独木舟的木阅读 13,631评论 2 10
  • 按照时间顺序,事件的生命周期是这样的: 事件的产生和传递(事件如何从父控件传递到子控件并寻找到最合适的view、寻...
    kadis阅读 4,168评论 0 2
  • iOS开发中的事件处理 理论非原创,是对网上资料的整理以及Demo验证 一. UIResponder 1.1 事件...
    丧心病狂乐阅读 4,059评论 0 0
  • 前言 按照时间顺序,事件的生命周期是这样的: 事件的产生和传递(事件如何从父控件传递到子控件并寻找到最合适的vie...
    欢博阅读 3,677评论 0 3