#import "QYCustomView.h"
#define HOR_SWIPE_MIN 20 //水平上,当低于这个值的时候, 不认为他是一个横扫的手势
#define VAR_SWIPE_MAX 40 //在垂直上,设置这误差范围,如果大于这个值的话, 横扫无效
@implementation QYCustomView
//当我们的事件开始的时候调, 对于touch来说, 实际上当手指头放到屏幕上的时候,这个方法会被调用
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
/*
// NSLog(@"%s",__func__);
// touches里存放的对象类型是UITouch类型,第一个UITouch表示的是一个手指
UITouch *touch = [touches anyObject];
if (touch.tapCount == 1) {
// anyObject任意取出一个对象
// 解决双击事件,出现先单击,后双击的问题?
// 1、让单击事件, 延迟执行, 如果有双击事件 在双击事件执行完成之后, 取消单击事件
// [self singleClicked:touch];
self.currentSingleTouch = touch;
[self performSelector:@selector(singleClicked:) withObject:touch afterDelay:2.0];
}else if (touch.tapCount == 2)
{
[self doubleClicked:touch];
}
*/
UITouch *tch = [touches anyObject];
// locationInView返回的值是当前custormView这个视图上点击的位置
self.startPoint = [tch locationInView:self];
}
- (void)singleClicked:(UITouch*)touch
{
NSLog(@"单击事件");
}
- (void)doubleClicked:(UITouch*)touch
{
NSLog(@"双击事件");
// 需要注意的是,取消事件的target,参数 SEL必须与perforSelector方法保持一致, 否则方法取消不了
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(singleClicked:) object:self.currentSingleTouch];
}
////当我们手指点击屏幕,并且没有抬起而滑动的时候, 这个方法被调用, 由此可知这个方法是连续被调用的。
//- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
//{
// NSLog(@"%s",__func__);
//}
//
//
//当我们的事件对束的时候调,对于touch来说, 实际上是当手指头离开屏幕的时候,这个方法会被调用
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *endTch = [touches anyObject];
CGPoint currentPoint = [endTch locationInView:self];
// fabsf 求绝对值的方法, 参数传入的是一具float类型
if ((fabsf(currentPoint.x - self.startPoint.x) >= HOR_SWIPE_MIN) &&
(fabsf(currentPoint.y - self.startPoint.y) <= VAR_SWIPE_MAX)) {
if (currentPoint.x - self.startPoint.x > 0) {
NSLog(@"Right Swipe");
}else
{
NSLog(@"Left SWipe");
}
}
}
//
////当我们的事件被取消的时候, 比如说:手指点击在屏幕上, 突然来电话, 这个时候, 电话的优先级很高,
////所有的事件都应该被取消。 这个方法会被调用
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"%s",__func__);
self.startPoint = CGPointZero;
}
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
// Drawing code
self.backgroundColor = [UIColor orangeColor];
}
@end