1

我有 3 个相同大小的 UIViews 堆叠在一起。最上面是透明的,仅用于检测触摸。检测到的触摸类型将决定我想要接收触摸事件的其他两个底层视图中的哪一个。一旦最顶层的视图完成了触摸,我需要将触摸事件转发到正确的底层视图。我怎样才能做到这一点?

编辑 - 我正在添加我的触摸检测代码。这是在 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

制作两个子视图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 回答