1.2view的拖拽
重点掌握UIView的触摸事件的监听
程序效果:
>重点掌握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);
}