【问题标题】:isExclusiveTouch not working on a custom UIViewisExclusiveTouch 不适用于自定义 UIView
【发布时间】:2017-02-02 09:28:19
【问题描述】:

我有一个包含两个子视图的视图:一个由 UIPageViewController 顶部的自定义视图组成的栏

我想避免用户同时触摸 bar 和 pageView(bar 控制页面视图,同时触摸它们会导致崩溃)

我所做的是将栏视图的 isExclusiveTouch 属性设置为 true。

override func awakeFromNib() {
    [...]
    isExclusiveTouch = true
}

documentation 表示如果视图的 isExclusiveTouch 属性设置为 true,则同一窗口中的其他视图应该无法接收任何触摸事件。然而,我可以在触摸栏的同时触摸和滚动页面视图。

在另一个屏幕上,我有多个由自定义视图组成的开关,我想避免同时触摸多个开关,所以我也将它们的 isExclusiveTouch 设置为 true,但仍然可以同时触摸其中两个。

我错过了 isExclusiveTouch 根本不起作用?

【问题讨论】:

    标签: ios iphone swift uikit


    【解决方案1】:

    exclusiveTouch 仅在 在独家触摸视图中有一个主动触摸。也就是说,如果 您在独家触摸视图中按下手指触摸不会开始 在其他视图中,直到您抬起第一根手指。它不会阻止 如果当前没有触摸,则从其他视图开始触摸 在 ExclusiveTouch 视图中。

    真正让这个视图成为屏幕上唯一可以接收的东西 触摸您需要在所有内容之上添加另一个视图 否则捕捉其余的触摸,或在某处子类化视图 您的层次结构(或您的 UIWindow 本身)并覆盖 hitTest:withEvent: 总是在可见时返回你的文本视图, 或为不在您的文本视图中的触摸返回 nil。

    Source

    【讨论】:

    • 是的,这就是我想要的行为。我应该不能在触摸栏时触摸页面视图,但应该能够在不触摸栏的情况下与之交互。问题是我可以在触摸栏的同时与页面视图进行交互。
    • @Luinily 我想你误解了,在这里查看答案,他解释了它是如何工作的:stackoverflow.com/questions/843338/…“它声明独家触摸属性不会影响视图框架之外的触摸。”跨度>
    • 我的链接中的文档示例正好相反。他们有两个不同的视图(A 和 B),A 的 isExclusiveTouch 设置为 true。 B不在A的框架内,而是在它的下方。 “如果用户在视图 A 内握住一根手指,同时在视图 B 内触摸,则视图 B 不会收到触摸,因为视图 ​​A 是唯一的视图跟踪触摸。”我仍然会再次阅读您的链接,并尝试看看我是否可以得到文档中所说的内容。
    • @Luinily 我认为您的 UIPageViewController 在其自己的控制器中处理了自己的触摸事件。您可以手动处理触摸事件并确保允许在 pageViewController (userInteractionEnabled) 上进行触摸以检测“barView”的触摸状态何时为 state==UIGestureRecognizerStateEnded ,这是我认为的“最简单”的方法解决方法。
    • 谢谢你的帮助,我终于可以让它工作了,你可以查看我的答案看看如何。
    【解决方案2】:

    我可以做到这一点: 我在栏的前面添加了一个透明视图,并将其 isExclusiveTouch 设置为 true。

    所以我的酒吧现在是这样的

    barView -|- subview 1
             |- subview 2
             |- [...]
             |- front view (transparent view for exclusive touch) <- new 
    

    在 barView 上的 isExclusiveTouch 不起作用,但在前视图上使用它。

    我也可以使用相同的解决方案让它在我的交换机上工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-29
      • 2017-06-25
      • 2019-05-18
      相关资源
      最近更新 更多