转发触摸事件下面的UIScrollView使用它们


0

后,我有一个关于iOS中/斯威夫特触摸操控一个问题:

我的项目看起来像这样

UIViewController 
    → UIView 
      → OverlayView (UIView) 
      → ScrollView (UIScrollView) 

的OverlayView的之上规定UIScrollView。两者都是UIViewControllers视图的子视图。

我这样做的原因是,我希望滚动视图正常运行(平移,缩放),而覆盖视图不受滚动视图可见内容中更改的影响。此外,叠加视图应处理触摸事件以在下面的滚动视图中显示内容的准则。

我面对现在的问题是,该触摸事件(touchesBegantouchesMovedtouchesEndedtouchesCancelled)上叠加视图不进行滚动视图(滚动视图不平移/缩放)。

我找到了一个解决方案,通过覆盖point(inside point: CGPoint, with event: UIEvent?) -> Bool并返回false将触摸事件转发到下一个视图。但是,覆盖视图上的触摸事件不会被调用。

有没有人知道如何实现这种行为?我试图在覆盖视图中调用下一个响应者的所有触摸事件,但这也不起作用。

感谢您的帮助!

  0

Intstead使用上滚动型的概述,创造的UIScrollView的子类,并处理触摸有 22 4月. 172017-04-22 12:37:40

  0

。您是否找到了解决方案? 28 11月. 172017-11-28 07:35:03

0

你最好的选择是查找hitTestdocs) - 在你的子类(覆盖)创建逻辑,当你想通过触摸事件向下跌破


0

的观点,我认为你是在正确的决定跟踪point(inside point: CGPoint, with event: UIEvent?) -> Bool

在您的“叠加”视图中,检查点是否在子视图内。如果是这样,则返回true以允许与子视图进行交互。如果不是,则返回false以“传递触摸”直到底层滚动视图。

class PassThruOverlayView: UIView { 

    override func point(inside point: CGPoint, with event: UIEvent?) -> Bool { 

     for v in subviews { 

      let ptInSub = v.convert(point, from: v.superview) 
      if v.bounds.contains(ptInSub) { 
       return true 
      } 

     } 

     return false 

    } 

} 

你可以在这里看到一个工作示例(显示在滚动型两种“重叠ScrollViews”和“UIView的叠加):https://github.com/DonMag/ScrollViewPassThru

  0

感谢您的回答!问题是,我需要覆盖视图和滚动视图中的触摸事件: -/ 24 4月. 172017-04-24 18:12:54

  0

hmmm ...因此,您想 - 例如 - 轻触按钮在叠加视图中,并触发一个动作***和***有相同的点击触发底层滚动视图中的东西? 24 4月. 172017-04-24 18:14:45

  0

准确!这是,我在滚动视图中有一些绘画画布,并希望在叠加视图中插入精确绘图的准则。我这样做的原因是,我希望指南不要放大滚动视图的内容。 25 4月. 172017-04-25 18:17:39

  0

你可以举一个你想要做什么的例子吗?例如,您是否在覆盖视图中使用了“UISlider”,并且在您前后拖动滑块时*还希望在“画布”上绘制一条线?我认为你想要触摸在覆盖层的一部分上注册**或者**在画布上注册,但不能同时注册。 25 4月. 172017-04-25 19:54:17