3.2 iOS view的拖拽

1.2view的拖拽

重点掌握UIView的触摸事件的监听

程序效果:

3.2 iOS view的拖拽_第1张图片
14635593768985.gif

>重点掌握UIView的下列方法

// 当触摸移动的时候调用该方法
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event

>重点掌握UITouch的下列方法

// 返回触摸点在指定view上面的位置
- (CGPoint)locationInView:(UIView *)view;
// 返回上一个触摸点在指定view上面的位置
- (CGPoint)previousLocationInView:(UIView *)view;

程序思路:

  • 需要自定义一个view,因为系统提供的view不能监听触摸事件.
  • 在touchMove里面做写业务逻辑,因为用户手指在view上移动的时候才需要view一起移动.
  • 获取手指当前的位置,获取手指上一个位置,就知道手指从哪移动到哪了,这个位置就是view移动的位置.
  • 当前view的位置 = 上一次view的位置 + 手指移动的偏移量

>核心算法
1.获取当前UITouch对象.
2.获取前一个触摸点的位置.
3.获取当前触摸点的位置.
4.分别计算X和Y的偏移量.(偏移量 = 上一个点的位置 - 当前点的位置)
5.使用view的transform属性或者center属性或者frame来改变view的当前坐标.

// 当手指在view上移动的时候
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    // 获取UITouch对象
    UITouch *touch = [touches anyObject];
    // 获取当前点
    CGPoint curP = [touch locationInView:self];
    // 获取上一个点
    CGPoint preP = [touch previousLocationInView:self];
    // 获取x轴偏移量
    CGFloat offsetX = curP.x - preP.x;
    // 获取y轴偏移量
    CGFloat offsetY = curP.y - preP.y;
    // 修改view的位置(frame,center,transform)(在当前点的基础上加上偏移量就可以移动view)
    self.transform = CGAffineTransformTranslate(self.transform, offsetX, offsetY);
    // 不能使用这种方法修改view的位置(直接新创建一个点)
    // self.transform = CGAffineTransformMakeTranslation(offsetX, 0);  
}

你可能感兴趣的:(3.2 iOS view的拖拽)