【发布时间】:2012-02-11 04:03:58
【问题描述】:
我正在尝试将 2 个UITapGestureRecognizers 添加到视图中,一个用于单击,一个用于双击事件。单击识别器按预期工作(单独)。但我似乎无法让双击识别器工作。
已尝试尝试以下属性:cancelsTouchesInView、delaysTouchesBegan 和 delaysTouchesEnded,但仍然无法正常工作。
当我双击时,单击识别器将始终被激活,并且双击事件也将被发送到超级视图。但是自定义双击识别器似乎根本没有收到通知。
文档似乎表明上述 3 个属性可用于此目的。但我只是不确定应该设置哪些值以及在哪个识别器上(单、双或两者)。希望熟悉这方面的人可以提供帮助。
以下是最新更新的代码块。
// ****** gesture recognizers ******
- (void)addSingleAndDoubleTapGestureRecognizersToView:(UIView *)view
{
// single tap
UITapGestureRecognizer *singleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget: tableViewController action: @selector(handleSingleTapOnView:)];
[singleTapRecognizer setNumberOfTouchesRequired:1];
[view addGestureRecognizer: singleTapRecognizer];
// double tap
UITapGestureRecognizer *doubleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget: tableViewController action: @selector (handleDoubleTapOnView:)];
[doubleTapRecognizer setNumberOfTouchesRequired:2];
[singleTapRecognizer requireGestureRecognizerToFail: doubleTapRecognizer];
[view addGestureRecognizer: doubleTapRecognizer];
}
- (void)handleSingleTapOnView:(id)sender
{
}
- (void)handleDoubleTapOnView:(id)sender
{
}
【问题讨论】:
-
随机注释:变量名中的下划线会让大多数 Objective-C 程序员畏缩。更糟糕的是你的变量名不是描述性的。为什么不直接使用 singleTapRecognizer 和 doubleTapRecognizer(或类似的东西)?打字需要一秒钟的时间,但会使您的代码更具可读性。
-
感谢您的建议,同意您的观点,变量名称应该更具描述性。但是这个特定的代码段还没有最终确定,将按照建议发布更精致和描述性的代码......
-
如果其他人有类似的问题。我努力让双击和单击识别器快速协同工作(单击工作正常,但没有双击)。我使用情节提要将识别器拖到场景中。我的viewDidLoad中有处理程序和语句:singleTapRecognizer.requireGestureRecognizerToFail(doubleTabRecognizer),但仍然没有双击。我缺少的难题是将双击识别器图标(从场景的顶行)拖动到要识别双击的视图部分。
-
@UIAdam 在 objc 中使用下划线作为私有 ivar 名称的前缀是相当普遍的,但不是吗? (来自 swift 背景)
标签: ios iphone uigesturerecognizer uitapgesturerecognizer