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)