触摸事件,有屏幕捕捉到的用户对屏幕的操作(点击,双击,长按,滑动,捏合,)
APP中使用最多的就是触摸事件,基本空间都封装了触摸方法。
从下面的几个代理方法中可以获取触摸状态,并且做出交互。
下面的代码是对一个基础控件的一个封装,改变中心点
//触摸开始
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
//冲突,要添加原来自带的手势
[super touchesBegan:touches withEvent:event];
//获取触摸对象
UITouch *touch = [touches anyObject];
//记录触摸开始的位置
self.startPoint = [touch locationInView:self];
}
//触摸移动
- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
[super touchesMoved:touches withEvent:event];
//计算手指移动距离
UITouch *touch = [touches anyObject];
//手指现在的位置
CGPoint currentPoint = [touch locationInView:self];
//计算x,y的差值
CGFloat xChange = currentPoint.x - self.startPoint.x;
CGFloat yChange = currentPoint.y - self.startPoint.y;
//改变中心点
self.center = CGPointMake(self.center.x + xChange, self.center.y + yChange);
//打印坐标点
NSLog(@"移动%@", NSStringFromCGPoint(self.center));
}
//触摸结束
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
[super touchesEnded:touches withEvent:event];
NSLog(@"结束%@", NSStringFromCGPoint(self.center));
}
运动事件,由加速计捕捉到的用户操作(典型的是:微信摇一摇)(计步)
一般是通过晃动,在代理方法中获取摇晃状态,进行交互,最典型的就是微信摇一摇,下面的代码是根据晃动随机的改变界面颜色
- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event {
NSLog(@"摇晃开始");
}
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {
NSLog(@"摇晃结束");
self.view.backgroundColor = [UIColor colorWithRed:arc4random() % 256 / 255.0 green:arc4random() % 256 / 255.0 blue:arc4random() % 256 / 255.0 alpha:arc4random() % 256 / 255.0];
}
- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event {
NSLog(@"摇晃取消");
}
遥控事件,例如耳机线控,蓝牙,遥控器
这种不在这里多做解释,有兴趣的读者可以查找资料