swift isExclusiveTouch无法在自定义UIView上工作

r8uurelv  于 2022-12-10  发布在  Swift
关注(0)|答案(2)|浏览(250)

我有一个包含两个子视图的视图:由UIPageViewController顶部的自定义视图组成的栏
我想避免用户能够同时触摸栏和页面视图(栏控制页面视图,同时触摸它们会导致崩溃)
我所做的就是将bar视图的isExclusiveTouch属性设置为true。

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

documentation表示如果视图的isExclusiveTouch属性设置为true,同一窗口中的其他视图将无法接收任何触摸事件。但我可以在触摸栏的同时在页面视图中触摸和滚动。
在另一个屏幕上我有多个由自定义视图组成的开关,我想避免多个开关同时被触摸,所以我也把它们的isExclusiveTouch设置为true,但仍然可以同时触摸其中的两个。
我错过了isExclusiveTouch是不工作在所有?

bxgwgixi

bxgwgixi1#

exclusiveTouch仅在独占触摸视图中有活动触摸时阻止在其他视图中进行触摸。也就是说,如果您在独占触摸视图中放下手指,则在您抬起第一个手指之前,其他视图中不会开始触摸。如果exclusiveTouch视图中当前没有触摸,则不会阻止在其他视图中开始触摸。

要真正使该视图成为屏幕上唯一可以接收触摸的视图,您需要在其他视图之上添加另一个视图以捕获其余的触摸,或者在您的层次结构中的某个位置(或您的UIWindow本身)创建一个视图的子类,并覆盖hitTest:withEvent:当文本视图可见时总是返回文本视图,或者对于不在文本视图中的触摸返回nil。

Source

sd2nnvve

sd2nnvve2#

我可以做到这一点:我在工具栏的前面添加了一个透明视图,并将isExclusiveTouch设置为true。
所以我的酒吧现在是这样的

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

barView上的isExclusiveTouch不起作用,但在前视图上使用它起作用。
我也可以用同样的解决方案让它为我的交换机工作。

相关问题