iOS开发iOS开发随笔iOS小知识

移动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)locationInView:(nullable UIView *)view;
- (CGPoint)locationInView:(nullable UIView *)view;

然后计算出X轴,Y轴的偏移量

  1. 创建“基于控件初始位置”的形变

    CGAffineTransformMakeTranslation(平移)

    CGAffineTransformMakeScale(缩放)

    CGAffineTransformMakeRotation(旋转)

  2. 创建“基于transform参数”的形变

    CGAffineTransformTranslate

    CGAffineTransformScale

    CGAffineTransformRotate

要知道我们的每次的移动是在上一次的叠加基础上,所以要用CGAffineTransformTranslate(CGAffineTransform t,CGFloat tx, CGFloat ty).

上一篇下一篇

猜你喜欢

热点阅读