UIView的拖拽

1.自定义一个UIView

2.在UIView的.m文件中实现touchMoved方法

实现代码如下

#import "kds.h"

@implementation kds

- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    UITouch *touch = [touches anyObject];
    //获取当前点
    CGPoint curP = [touch locationInView:self];
   //获取上一个点
    CGPoint preP = [touch previousLocationInView:self];
    //获取X轴偏移量
    CGFloat offsetX = curP.x - preP.x;
    //修改View的位置(frame、center、transform)
    
    //self.transform = CGAffineTransformMakeTranslation(offsetX, 0);

//获取Y轴的偏移量
    CGFloat offsetY = curP.y - preP.y;
    
self.transform = CGAffineTransformTranslate(self.transform, offsetX, offsetY);}

补充说明:

iOS中的事件可以分为3大类型

1.触摸事件 2.加速计事件 3.远程控制事件

 在IOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接受并处理事件。我们称之为“响应者对象”

UIApplication/UIViewController/UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件

UIResponder内部提供了以下方法来处理事件

1.触摸事件:touchesBegan、touchesMoved、touchesEnded、touchesCancelled

2.加速计事件:motionBegan/motionEnded/motionCancelled

3.远程控制事件:remoteControlReceivedWithEvent

 

UITouch

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

一根手指对应一个UITouch对象

UITouch的作用

保存着跟手指相关的信息,比如触摸的位置、事件、阶段

当手指移动时,系统会更新同一个UITouch对象,使之能够一直保存该手指在的触摸位置

当手指离开屏幕时,系统会销毁相应的UITouch对象

UITouch的属性

1.触摸产生时所处的窗口UIwindow

2.触摸产生时所处的试图UIView

3.短时间内点按屏幕的次数NSInteger tapcount

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

5.当前触摸事件所处的状态UITouchPhase

UITouch的方法

1.locationInView

返回值表示触摸在View上的位置

这里返回的位置是针对View的坐标系的(以View的左上角为原点(0.0))调入时传入的参数为nil的话返回的是触摸点在UIWindow的位置

2.previousLocaitonInView

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

 

UIEvent

每产生一个事件,就会产生一个UIEvent对象

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

常见属性

1.事件类型

UIEventType 

UIEventSubtype

2.事件产生的时间

NSTimeInterval

UIEvent还提供了相应的方法可以获得在某个View上面的触摸对象(UITouch)

 

 

 

 

每个人都要坚持自己的梦想,哪怕追梦的过程很痛苦很难熬,只要我们每天向前迈进一小步,蓦然回首我们会欣喜的发现,其实我们已经在自己逐梦的道路上走了很远。