我开发了类似于默认iOS日历应用程序“日历”的日历库“日视图”(议程)。
日历显示事件是UIView
的子类。这些事件可以被点击,长按或可以处理其他基于手势的用户交互。
有时CurrentTimeIndicator
也是组成的UIView
子类可能与Event
重叠。
Event
和CurrentTimeIndicator
都共享一个共同的超级视图TimelineView
。
它们看起来像这样:
[CurrentTimeIndicator
上没有Event
时,一切正常,我可以通过点击视图来触发用户交互事件。但是,当CurrentTimeIndicator
与Event
重叠时,指示器接收到的触摸事件将被忽略,并且不会传递到基础的Event
视图。
目标是将CurrentTimeIndicator
完全排除在响应者链之外,但让Event
处理任何触摸事件,即使CurrentTimeIndicator
遮盖了它。
指示器和事件都是同级视图。在突出显示的触摸中点击事件时,触摸不会被传递。
到目前为止,我已经尝试过使用userInteractionEnabled = true / false
,覆盖了hitTest:withEvent:方法。
还有哪些其他方法可以解决此问题?
代码参考:
Event View - creating gesture recognizersTimeline - layout current time indicatorCurrent Time Indicator - code
从概念上讲,我正在寻找类似于zPosition的CALayer
属性的东西,但用于触摸输入。
覆盖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
}