1. ホーム
  2. ios

[解決済み] UITapGestureRecognizer - シングルタップとダブルタップ

2022-04-25 18:19:06

質問

を2つ追加しようとしています。 UITapGestureRecognizers をビューに追加します。1 つはシングルタップ用、もう 1 つはダブルタップ用のイベントです。 シングルタップ認識機能は期待通りに(それ自体で)動作しています。 しかし、ダブルタップの認識機能は動作していないようです。

のようなプロパティで実験してみました。 cancelsTouchesInView , delaysTouchesBegandelaysTouchesEnded が、まだうまくいきません。

ダブルタップすると、シングルタップ認識機能が常に有効になり、ダブルタップのイベントもスーパー ビューに送信されます。 しかし、カスタムのダブルタップ認識器は全く通知されないようです。

ドキュメントによると、上記の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
{

}

解決方法は?

UITapGestureRecognizer *singleTap = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doSingleTap)] autorelease];
singleTap.numberOfTapsRequired = 1; 
[self.view addGestureRecognizer:singleTap];

UITapGestureRecognizer *doubleTap = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doDoubleTap)] autorelease];
doubleTap.numberOfTapsRequired = 2; 
[self.view addGestureRecognizer:doubleTap];

[singleTap requireGestureRecognizerToFail:doubleTap];

を使用している場合 numberOfTouchesRequired である必要があります。 .numberOfTouchesRequired = 1;

Swiftの場合

let singleTapGesture = UITapGestureRecognizer(target: self, action: #selector(didPressPartButton))
singleTapGesture.numberOfTapsRequired = 1
view.addGestureRecognizer(singleTapGesture)

let doubleTapGesture = UITapGestureRecognizer(target: self, action: #selector(didDoubleTap))
doubleTapGesture.numberOfTapsRequired = 2
view.addGestureRecognizer(doubleTapGesture)

singleTapGesture.require(toFail: doubleTapGesture)