使同级视图忽略任何触摸输入,其他同级视图应接收它

问题描述 投票:0回答:1

我开发了类似于默认iOS日历应用程序“日历”的日历库“日视图”(议程)。

日历显示事件是UIView的子类。这些事件可以被点击,长按或可以处理其他基于手势的用户交互。

有时CurrentTimeIndicator也是组成的UIView子类可能与Event重叠。

EventCurrentTimeIndicator都共享一个共同的超级视图TimelineView

它们看起来像这样:

timeline view

[CurrentTimeIndicator上没有Event时,一切正常,我可以通过点击视图来触发用户交互事件。但是,当CurrentTimeIndicatorEvent重叠时,指示器接收到的触摸事件将被忽略,并且不会传递到基础的Event视图。

目标是将CurrentTimeIndicator完全排除在响应者链之外,但让Event处理任何触摸事件,即使CurrentTimeIndicator遮盖了它。

查看层次结构:view hierarchy

指示器和事件都是同级视图。在突出显示的触摸中点击事件时,触摸不会被传递。

到目前为止,我已经尝试过使用userInteractionEnabled = true / false,覆盖了hitTest:withEvent:方法。

还有哪些其他方法可以解决此问题?

代码参考:

Event View - creating gesture recognizersTimeline - layout current time indicatorCurrent Time Indicator - code

从概念上讲,我正在寻找类似于zPositionCALayer属性的东西,但用于触摸输入。

ios swift uikit uigesturerecognizer uievent
1个回答
0
投票

覆盖CurrentTimeIndicator视图内的pointInside方法:

  override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
      print("Passing all touches to the next view (if any), in the view stack.")
      return false
  }

如此处回答:iOS - forward all touches through a view

© www.soinside.com 2019 - 2024. All rights reserved.