首页 > 解决方案 > 如何使用 touchesBegan 和 touchesEnded 检测点击手势

问题描述

我创建了一个直接从类派生的自定义控件UIView。现在,如果用户点击我视图的特定部分,我想执行一个操作。所以我已经覆盖了方法touchesBegantouchesEndedtouchesCancelled。问题是,touchesEnded如果我只是点击显示屏,则永远不会调用该方法。该方法touchesCancelled被称为 insted。touchesEnded仅当我执行某些手势(滑动、移动……)时才会调用。

我是否需要配置我的视图以启用点击手势?

我的代码:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    NSLog(@"touchesBegan");
    self->touchDown = YES;
    [UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionAllowUserInteraction animations:^{
        self.value = 1.0;
    } completion:nil];
}

- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    if (self->touchDown) {
        NSLog(@"touchesEnded");
        self->touchDown = NO;
        [UIView animateWithDuration:0.3 animations:^{
            self.value = 0.0;
        } completion:nil];
    }
}

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
    if (self->touchDown) {
        NSLog(@"touchesCancelled");
        self->touchDown = NO;
        [UIView animateWithDuration:0.3 animations:^{
            self.value = 0.5;
        } completion:nil];
    }
}

对于点击手势,我得到:

2018-07-17 09:55:20.994645+0200 iOS 测试[33049:2763212] touchesBegan

2018-07-17 09:55:21.092409+0200 iOS 测试[33049:2763212] touchesCancelled

标签: iosobjective-ccocoa-touch

解决方案


您是否尝试过设置recognizer.cancelsTouchesInView = NO;您的视图

一个布尔值,影响在识别手势时是否将触摸传递到视图。


推荐阅读