【问题标题】:Why is gestureRecognizerShouldBegin called multiple times?为什么多次调用gestureRecognizerShouldBegin?
【发布时间】:2016-11-06 11:01:19
【问题描述】:

我做了这样的手势:

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc]     
initWithTarget:self action:@selector(tapOnPhoto:)];
tapGesture.numberOfTapsRequired = 1;
tapGesture.numberOfTouchesRequired = 1;                                              
tapGesture.delegate = self;
[self.htmlWebView addGestureRecognizer:tapGesture]; 

当点击 htmlWebView 调用 gestureRecognizerShouldBegin 几次。

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{
    if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]){
        [self performSelector:@selector(tapOnPhoto:) withObject:gestureRecognizer];

    }
    return YES;
}

为什么每个手势会多次调用gestureRecognizerShouldBegin?

【问题讨论】:

  • 试试这个:tapGesture.delaysTouchesBegan = YES;

标签: ios objective-c gesture


【解决方案1】:

根据 gestureRecognizerShouldBegin 描述。

当手势识别器尝试转换时调用此方法 脱离 UIGestureRecognizerStatePossible 状态。返回 NO 原因 手势识别器过渡到 UIGestureRecognizerStateFailed 状态。

这个方法会被多次调用来获取手势的转换状态。

此外,您已经为 TapGesture 添加了一个选择器,为什么要显式调用该方法,该方法将被自己调用。

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{
    if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]){
        [self performSelector:@selector(tapOnPhoto:) withObject:gestureRecognizer];

    }
    return YES;
}

不需要这个函数,你可以删除它,因为你在那里只调用一个方法。

【讨论】:

    【解决方案2】:

    正如@Rajat 在他的回答中提到的,您可以删除委托方法,而是使用您的 tapOnPhoto: 方法来解析您的手势逻辑。

    您将作为参数接收到该方法的 UIGestureRecognizer 对象有一个名为 state 的属性

    可能具有以下值:

    UIGestureRecognizerStatePossible
    UIGestureRecognizerStateBegan
    UIGestureRecognizerStateChanged
    UIGestureRecognizerStateEnded
    UIGestureRecognizerStateCancelled
    UIGestureRecognizerStateFailed
    UIGestureRecognizerStateRecognized
    

    您可以使用switch并为每种情况提供特定的逻辑。

    【讨论】:

      猜你喜欢
      • 2015-01-16
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-01
      相关资源
      最近更新 更多