1

同じサイズの 3 つの UIView が積み重なっています。最上部は透明で、タッチの検出にのみ使用されます。検出されたタッチの種類によって、他の 2 つの基になるビューのどちらでタッチ イベントを受け取りたいかが決まります。最上位のビューでのタッチが完了したら、タッチ イベントを正しい下位ビューに転送する必要があります。どうやってやるの?

編集 - タッチ検出コードを追加しています。これは MainViewController 内にあり、そのビューには 3 つのサブビューがすべて含まれています。

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{

    for (UITouch *touch in touches)
    {
        if (touch.view == self.touchOverlay) {
            CGPoint touchLocation = [touch locationInView:touch.view];

            //do a bunch of math to determine which view should get the touches.
            if (viewAshouldGetTouches) //forward to viewA
            if (viewBshouldGetTouches) //forward to viewB


        }
    }
}
4

2 に答える 2

3

2 つのサブビューを作成setUserInteractionEnabled:NOし、親ですべてのタッチを処理します。次に、タッチの種類に応じて、正しいビューにプログラムによるタッチ イベントを送信します。そうすれば、頂上の明確な視界は必要ありません。基本的に、上→下→中央ではなく、下から順にタッチ イベントを調整します。

于 2013-02-01T20:52:51.153 に答える
1

これを行うには、トップビューのUIViewサブクラスを作成し、次のメソッドをオーバーライドします。

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
    // UIView will be "transparent" for touch events if we return NO
    return (point.y < MIDDLE_Y1 || point.y > MIDDLE_Y2);
}
于 2013-02-01T20:42:13.153 に答える