如何使用touchesBegan和touchesEnded检测点击手势

时间:2018-07-17 08:35:41

标签: ios objective-c cocoa-touch

我创建了一个自定义控件,该控件直接从类UIView派生。现在,如果用户点击视图的特定部分,我想执行一个操作。因此,我已经覆盖了方法touchesBegantouchesEndedtouchesCancelled。问题是,如果我仅点击显示,就永远不会调用方法touchesEnded。方法touchesCancelled被称为。 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

2 个答案:

答案 0 :(得分:1)

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

  

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

答案 1 :(得分:0)

你应该经历这个。

根据Apple文档,

https://developer.apple.com/documentation/uikit/uigesturerecognizer?changes=_4&language=objc

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
   // Sent to the gesture recognizer when one or more fingers touch down in the associated view.
}


- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event 
{
    //Sent to the gesture recognizer when one or more fingers move in the associated view.
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{
   //Sent to the gesture recognizer when one or more fingers lift from the associated view.
}

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
 {
   //Sent to the gesture recognizer when a system event (such as an incoming phone call) cancels a touch event.
 }