1. ホーム
  2. objective-c

[解決済み] UIGestureRecognizerはタッチイベントを処理するためのサブビューをブロックします。

2023-07-03 23:50:40

質問

私はこれがどのように行われるかを理解しようとしています。 正しい方法 . 状況を描写してみました。

を追加しています。 UITableView のサブビューとして UIView . そのため UIView はタップに反応し pinchGestureRecognizer に反応しますが、そうすると、テーブルビューはこれら 2 つのジェスチャに反応しなくなります (スワイプにはまだ反応します)。

以下のコードで動作するようにしましたが、明らかに良い解決策ではないので、もっと良い方法があると思います。これは UIView (スーパービュー) の中にあります。

-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    if([super hitTest:point withEvent:event] == self) {
        for (id gesture in self.gestureRecognizers) {
            [gesture setEnabled:YES];
        }
        return self;
    }
    for (id gesture in self.gestureRecognizers) {
        [gesture setEnabled:NO];
    }
    return [self.subviews lastObject];
}

どのように解決するのですか?

私は非常に似たような問題を持っていたし、私の解決策を見つけた このSOの質問で . 要約すると、あなた自身を、あなたの UIGestureRecognizer のデリゲートとして設定し、 ターゲットとなるビューをチェックしてから、認識デバイスにタッチを処理させます。関連するデリゲートメソッドは

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
       shouldReceiveTouch:(UITouch *)touch