UILongPressGestureRecognizer
タッチの最小数 (デフォルトでは 1 本の指) しか認識しておらず、後で別の指を置いてもあまり効果がありません。1 回のタッチが必要な実際の電話でこれを試すと、最初のタッチでレコグナイザーが状態 1 に遷移することがわかります。最初の指を横に動かすか、2 番目の指を押し下げると、状態 2 に遷移します。最初の指を持ち上げるタッチダウンすると、状態 3 に遷移し、ジェスチャが終了します。
UILongPressGestureRecognizer
上記の最初のビューと同じビューに2 番目のビューを追加しましたが、これには最低 2 回のタッチが必要でした。そのようです:
UILongPressGestureRecognizer *lpgr1 = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(lpgr1Method:)];
UILongPressGestureRecognizer *lpgr2 = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(lpgr2Method:)];
lpgr2.numberOfTouchesRequired = 2;
[self.view addGestureRecognizer:lpgr1];
[self.view addGestureRecognizer:lpgr2];
// ...
- (void)lpgr1Method:(UIGestureRecognizer *)gestureRecognizer {
UIGestureRecognizerState state = gestureRecognizer.state;
self.stateLabel.text = [NSString stringWithFormat:@"%d", (int)state];
}
- (void)lpgr2Method:(UIGestureRecognizer *)gestureRecognizer {
UIGestureRecognizerState state = gestureRecognizer.state;
self.stateLabel2.text = [NSString stringWithFormat:@"%d", (int)state];
}
最初に 1 本の指で触れたままにすると、lpgr1
状態 1 になります。次に、2 本目の指で触れたままにしておくと、lpgr1
状態 2lpgr2
になります。まったく発火しません。
一度に 2 本の指で触れてそれを保持すると、lpgr2
発火し、発火しlpgr1
ません。
したがって、ビュー全体に 2 つの認識機能を追加するのは混乱を招くだけであり、どのようにプログラムしても、目的の結果が得られないように見えます。したがって、適切なアプローチは、 の独自のサブクラスを作成することUIGestureRecognizer
です。
編集:私もこれを試しました:
lpgr2.delegate = self;
lpgr1.delegate = self;
// ...
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return true;
}
これにより、両方のレコグナイザーが同時に起動し、2 番目の指が触れたことを認識できます。ただし、lpgr1
人差し指を離した時点で終了。私もあなたが望むようにこれを行うことができませんでした。サブクラスを書きたいのですが、別のところで注意が必要です。幸運を!