4

parentViewと呼ばれるサブビューを持つビューがありますchildView。の一部はchildViewの範囲外でありparentView、それchildViewpanGestureRecognizer接続されています。スーパービューの範囲外であっても、parentViewタッチを認識できるように、以下を実装しました。childView

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
    if (!self.clipsToBounds && !self.hidden && self.alpha > 0)
    {
        for (UIView *subview in self.subviews)
        {
            CGPoint subPoint = [subview convertPoint:point fromView:self];
            UIView *result = [subview hitTest:subPoint withEvent:event];
            if (result != nil)
            {
                return result;
                break;
            }
        }
    }

    return [super hitTest:point withEvent:event];
}

しかし、私がタッチまたはドラッグしたときchildViewhitTestは呼び出されていませんparentView。どうしてこれなの?

4

1 に答える 1

2

イベントはレスポンダーチェーンを下って行き、hittestが呼び出される前に使用されるためです

したがって、この場合、イベントは上から下に移動します...レスポンダーチェーンに関するドキュメントを確認してください。

ただし、あまり明確ではありません:D http://developer.apple.com/library/ios/#DOCUMENTATION/EventHandling/Conceptual/EventHandlingiPhoneOS/Introduction/Introduction.html

しかし、重要な点は次のとおりです。

  • ヒットテストビューには、タッチイベントを処理する最初の機会が与えられます。ヒットテストビューがイベントを処理できない場合、システムがイベントを処理できるオブジェクトを見つけるまで、「レスポンダーチェーンはレスポンダーオブジェクトで構成されています」で説明されているように、イベントはそのビューのレスポンダーチェーンを上に移動します。

  • タッチイベント。ヒットテストビューがタッチイベントを処理できない場合、イベントはヒットテストビューで始まるレスポンダーのチェーンに渡されます。

于 2013-03-17T21:57:24.103 に答える