首页 > 代码库 > 手势(2)——单击,双击,判断左右划

手势(2)——单击,双击,判断左右划

#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