iOS - 如何将触摸转发到底层uiview


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 


     } 
    } 
} 
  0

所有UIView的单个视图的子视图? 01 2月. 132013-02-01 20:42:21

  0

@ Putz1103是的,他们是单个视图的子视图。我在视图控制器中检查touchesMoved等,而不是包含视图。 01 2月. 132013-02-01 20:46:42

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); 
} 
  0

但是,如果我这样做,我仍然可以检查主视图控制器的touchesMoved触摸顶视图?这就是我确定哪个底层视图可以触及的地方。 01 2月. 132013-02-01 20:45:44


3

让你的两个子视图setUserInteractionEnabled:NO和处理所有触摸父。然后,根据触摸类型,将正确的视图发送到编程触摸事件。那么你不需要在顶部有清晰的视角。基本上你会自下而上协调触摸事件,而不是去顶部 - >底部 - >中间。

  0

我已经在上面添加了我的touchesMoved方法。你可以举一个例子来说明如何从touchesMoved中发送一个编程触摸事件的视图吗?基本上这两个视图都包含滚动视图,如果视图接收到触摸事件,则需要正常滚动。 01 2月. 132013-02-01 21:01:28

  0

只需调用'[view1 touchesBegan:touches withEvent:event];'从touchesbegan里面调用。我不确定scrollview能否正常使用,但在我的脑海中应该如此。 01 2月. 132013-02-01 21:30:55

  0

我需要view1来接收touchesMoved事件,但不是touchesBegan。从touchesMoved内部调用touchesMoved似乎会导致无限循环。 01 2月. 132013-02-01 21:45:53

  0

你的“view1”呼叫[超级动作移动...]?因为那会造成问题。 01 2月. 132013-02-01 21:50:23

  0

不,view1不是子类。这只是覆盖视图下屏幕上的一个视图。 01 2月. 132013-02-01 21:59:19

  0

是的,那么我的回答是废话。你可以做的是让你的“清晰”视图解析触摸事件,然后了解它的超级视图的类,并在超级视图的类视图内调用触摸事件。然后确保在所有视图上启用了setuserinteraction。 02 2月. 132013-02-02 02:04:22

  0

试过了。 touchesMoved在视图控制器中被调用,但scrollviews不会获得触摸事件。 02 2月. 132013-02-02 22:06:00