移动View随着手指
2016-04-28 本文已影响226人
骨古
一根或者多根手指在view上移动,系统会自动调用view的下面方法(随着手指的移动,会持续调用该方法)
- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event;
一根或者多根手指开始触摸view,系统会自动调用view的下面方法
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
一根或者多根手指离开view,系统会自动调用view的下面方法
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
触摸结束前,某个系统事件(例如电话呼入)会打断触摸过程,系统会自动调用view的下面方法
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
以上是UIView的触摸事件处理的流程方法
- 下面是代码的实现
- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
NSLog(@"%@", touches);
UITouch *touch = [touches anyObject];
//当前的point
CGPoint currentP = [touch locationInView:self];
//以前的point
CGPoint preP = [touch previousLocationInView:self];
//x轴偏移的量
CGFloat offsetX = currentP.x - preP.x;
//Y轴偏移的量
CGFloat offsetY = currentP.y - preP.y;
self.transform = CGAffineTransformTranslate(self.transform, offsetX, offsetY);
}
UITouch
当用户的手指触摸屏幕的时,就会创建一个UITouch对象,注:一根手指对应一个UItouch对象
- 作用
- 保存一些与手指相关的消息,比如说触摸位置(CGPoint),时间。阶段
- 当手指移动的时,系统会更新同一个UITouch对象
- 手指离开时,就会销毁对应的UItouch
- 获得当前的point
- (CGPoint)locationInView:(nullable UIView *)view;
- 获得前一个位置的point
- (CGPoint)locationInView:(nullable UIView *)view;
然后计算出X轴,Y轴的偏移量
- transform 在OC中,通过transform属性可以修改对象的平移、缩放比例和旋转角度
- 常用的创建transform结构体方法分两大类
-
创建“基于控件初始位置”的形变
CGAffineTransformMakeTranslation(平移)
CGAffineTransformMakeScale(缩放)
CGAffineTransformMakeRotation(旋转)
-
创建“基于transform参数”的形变
CGAffineTransformTranslate
CGAffineTransformScale
CGAffineTransformRotate