使兄弟视图忽略任何触摸输入,另一个兄弟视图应该接收它

Make sibling view ignore any touch input, the other sibling view should receive it

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

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

有时也是组合 UIView 子类的 CurrentTimeIndicator 可能与 Event.

重叠

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

加在一起,它们看起来像这样:

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

目标是将 CurrentTimeIndicator 从响应链中完全排除,但让 Event 处理任何触摸事件,即使被 CurrentTimeIndicator 遮挡。

查看层次结构:

指标和事件都是兄弟视图。当点击高亮触摸区中的事件时,触摸没有传递。

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

解决此问题的其他方法是什么?

代码参考:

Event View - creating gesture recognizers Timeline - layout current time indicator Current Time Indicator - code

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

覆盖 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