iOS-如何将触摸转发到基础uiview

iOS-如何将触摸转发到基础uiview,ios,uiview,touch,touch-event,Ios,Uiview,Touch,Touch Event,我有3个相同大小的UIView,它们叠在一起。最上面的是透明的,仅用于检测触摸。检测到的触摸类型将决定我希望接收触摸事件的其他两个基本视图中的哪一个。一旦最上面的视图完成了触摸,我需要将触摸事件转发到正确的底层视图。我该怎么做 编辑-我正在添加我的触摸检测代码。这在MainViewController中,其视图包含所有3个子视图 -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { for (UITouch

我有3个相同大小的UIView,它们叠在一起。最上面的是透明的,仅用于检测触摸。检测到的触摸类型将决定我希望接收触摸事件的其他两个基本视图中的哪一个。一旦最上面的视图完成了触摸,我需要将触摸事件转发到正确的底层视图。我该怎么做

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


        }
    }
}

为此,必须为俯视图创建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);
}
-(BOOL)点内部:(CGPoint)点与事件:(UIEvent*)事件{
//如果我们返回否,UIView将对触摸事件“透明”
返回(点yMIDDLE|Y2);
}

为此,您必须为俯视图创建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);
}
-(BOOL)点内部:(CGPoint)点与事件:(UIEvent*)事件{
//如果我们返回否,UIView将对触摸事件“透明”
返回(点yMIDDLE|Y2);
}

使您的两个子视图
setUserInteractionEnabled:NO
并处理父视图中的所有触摸。然后,根据触摸类型,向正确的视图发送编程触摸事件。那么你就不需要在顶部有清晰的视野了。基本上,您将从下至上协调触摸事件,而不是从上到下到中。

使您的两个子视图
setUserInteractionEnabled:NO
并处理父视图中的所有触摸。然后,根据触摸类型,向正确的视图发送编程触摸事件。那么你就不需要在顶部有清晰的视野了。基本上,您将从下至上协调触摸事件,而不是从上到下到中。

UIView的所有子视图都是单个视图吗?@Putz1103是的,它们是单个视图的子视图。我正在查看视图控制器中包含视图的TouchsMoved等。UIView的所有子视图都是单个视图吗?@Putz1103是的,它们是单个视图的子视图。我正在查看视图控制器中的TouchsMoved等,而不是包含视图。但是如果我这样做,我是否仍可以在主视图控制器的TouchsMoved中检查俯视图中的触摸?这就是我决定哪个底层视图应该得到触摸的地方。但是如果我这样做了,我还能在主视图控制器的触摸中检查顶部视图中的触摸吗?这就是我决定哪一个底层视图应该得到触动的地方。您能否举例说明如何从TouchsMoved中向其中一个视图发送编程触摸事件?基本上,这两个视图包含滚动视图,如果视图接收到触摸事件,则需要像正常情况下一样滚动从内部触摸开始。我不确定scrollview是否能正常使用,但在我看来应该可以。我需要view1来接收TouchsMoved事件,而不是TouchsStart。从touchesMoved内部调用touchesMoved似乎会导致无限循环。您的“view1”是否调用[super touchesMoved…]?因为这会导致问题。不,view1不是子类。这只是屏幕上的一个视图,在覆盖视图下。我在上面添加了我的touchesMoved方法。您能否举例说明如何从TouchsMoved中向其中一个视图发送编程触摸事件?基本上,这两个视图包含滚动视图,如果视图接收到触摸事件,则需要像正常情况下一样滚动从内部触摸开始。我不确定scrollview是否能正常使用,但在我看来应该可以。我需要view1来接收TouchsMoved事件,而不是TouchsStart。从touchesMoved内部调用touchesMoved似乎会导致无限循环。您的“view1”是否调用[super touchesMoved…]?因为这会导致问题。不,view1不是子类。它只是屏幕上的一个视图,在覆盖视图下。