0

サブクラス化された UIView があり、customView と呼びます。ユーザーがジェスチャ認識機能やその他のコントロールを持つサブビューを操作できるようにタッチを有効にしたいのですが、ビューの下に描画されたビューがまだタッチできるように、ビュー自体はタッチできないようにしたいと思います。つまり、customView はアプリ内の他のビューの上に描画されますが、customView のサブビューへのタッチを許可しながら、下のビューをタッチ可能にしたいと考えています。

touchesBegan をそのように使用しようとしましたが、これは機能しません。何か案は?読んでくれてありがとう!

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [[event allTouches] anyObject];

//I've tagged the views that I want to be touchable.
    if ([touch view].tag == 1000 || [touch view].tag == 2000 || [touch view].tag == 3000) {
        self.userInteractionEnabled = YES;
    } else {
        self.userInteractionEnabled = NO;
    }
}
4

2 に答える 2

1

必要なことは、customView に次のメソッドを実装することです。

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
    //check if one of the subviews was hit, if so forward the touch event to it
    for (UIView *view in self.subviews){
        if (CGRectContainsPoint(view.frame, point))
            return view;
    }

    // use this to pass the 'touch' upward in case no subviews trigger the touch
    return [super hitTest:point withEvent:event];
}
于 2013-03-06T15:33:21.677 に答える
0

次に、それらのサブビューをカスタムビューに追加します。他のバイスは、カスタムビューに触れさせないでください。カスタムビューをそれらのサブビューの下に配置して、選択したサブビューがタッチ可能になるようにします。

于 2013-03-05T12:49:38.437 に答える