2 つのジェスチャ認識機能を備えた UIView があります。どちらも 2 本の指でのタップを認識します。1 本は画面の上半分、もう 1 本は画面の下半分です。その UIView には、画面全体をカバーする 4 つのボタンがあります (各ボタンは画面の 4 分の 1 です)。
ユーザーが2つのボタンを同時に押したときを検出するためにジェスチャー認識エンジンを使用していますが、ボタンの通常のタッチを認識したいと考えています。
私はすべてをセットアップしました、そしてそれはうまくいきます。ただし、1 本の指だけで押すと、ボタンの影はタッチダウンではなくタッチアップで表示されます。そして、それは奇妙に感じます。delaysTouchesBegan を変更しようとしましたが、成功しませんでした。
両方の動作を持つ方法はありますか?2 本の指でタッチを検出しますが、指が 1 本しかないときに「通常の動作」をしますか? それ以外の場合、UIbutton の押された状態を強制できますか?
ジェスチャをセットアップする方法は次のとおりです。
-(void)initGestureRecognition{
handClapTapGestureRecognizer = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handClapDetected:)];
handClapTapGestureRecognizer.numberOfTouchesRequired = 2;
handClapTapGestureRecognizer.numberOfTapsRequired = 1;
handClapTapGestureRecognizer.cancelsTouchesInView = YES;
[self.gestureRecognitionView addGestureRecognizer:handClapTapGestureRecognizer];
handClapTapGestureRecognizer.delegate = self;
jumpTapGestureRecognizer = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(jumpDetected:)];
jumpTapGestureRecognizer.numberOfTouchesRequired = 2;
jumpTapGestureRecognizer.numberOfTapsRequired = 1;
jumpTapGestureRecognizer.cancelsTouchesInView = YES;
[self.gestureRecognitionView addGestureRecognizer:jumpTapGestureRecognizer];
jumpTapGestureRecognizer.delegate = self;
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
return NO;
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
if ([gestureRecognizer isEqual:handClapTapGestureRecognizer] && [touch locationInView:self.view].y > self.view.frame.size.height/2)
return NO;
if ([gestureRecognizer isEqual:jumpTapGestureRecognizer] && [touch locationInView:self.view].y < self.view.frame.size.height/2)
return NO;
return YES;
}
私の問題は、UITapGestureRecognizer を持つビュー内の UIButton に似ていますが、違いは、私の場合、動作は問題なく、Touch DOWN のボタンに影を付けようとしているだけです。タッチアップよりも。
ありがとう