在子视图控制器中快速通过点击。

class PassThroughView: UIView {
    override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
        for subview in subviews {
            if !subview.isHidden && subview.isUserInteractionEnabled && subview.point(inside: convert(point, to: subview), with: event) {
            return true
        }
    }
    return false
}

我有一个子视图控制器,它占据了屏幕底部30%的空间。这个子视图控制器管理着几个浮动按钮。

当用户按下浮动按钮之间的空白透明区域时,子视图控制器会接收到触摸,有可能有一个UIButton BEHIND在子视图控制器上,用户想触摸,但由于被子视图控制器的 “透明 “区域覆盖而无法触摸。

我找到了一些关于子类UIView的讨论,并覆盖了上面的point inside功能,但当我有一个子视图控制器时,如何做到这一点?

ps: 添加了下面的截图来说明这个问题。子视图控制器管理着4个浮动按钮。子视图控制器有一个默认的视图,我把它设置成黄色的颜色,以示明显。蓝色信息按钮是主视图控制器上的UIButton的例子,被childviewcontroller的这个视图覆盖。

enter image description here

ps2.子视图控制器 这就是子视图控制器加到主视图上的方法。

private func createControlBar(){
    controlBarViewController = ControlBarViewController()
    controlBarViewController.view.translatesAutoresizingMaskIntoConstraints = false
    view.addSubview(controlBarViewController.view)
    controlBarViewController.delegate = self

    controlBarViewController.view.snp.makeConstraints { m in
        m.bottom.equalTo(view.snp.bottom)
        m.centerX.equalTo(view.snp.centerX)
        m.width.equalTo(view.snp.width)
        m.height.equalTo(180)
    }
}

UIView的子类应该在哪里?

解决方案:

原来我的问题完全解决了,只要把CustomBarViewController的所有代码转移到CustomBarView上就可以了。我并不是真的需要一个视图控件,我需要的只是一个自定义的视图,覆盖点内点的方法

private func createControlBar(){

    controlBarView = ControlBarView(frame: CGRect(x: 0, y: 0, width: 400, height: 400))
    controlBarView.delegate = self
    view.addSubview(controlBarView)

    controlBarView.snp.makeConstraints { m in
        m.bottom.equalTo(view.snp.bottom)
        m.centerX.equalTo(view.snp.centerX)
        m.width.equalTo(view.snp.width)
        m.height.equalTo(180)
    }
}

Inside ControlBarView……

override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
    for subview in subviews {
        if !subview.isHidden && subview.isUserInteractionEnabled && subview.point(inside: convert(point, to: subview), with: event) {
            return true
        }
    }
    return false
}

本文来自投稿,不代表运维实战侠立场,如若转载,请注明出处:https://www.shizhanxia.com/880.html

(0)
上一篇 2022年6月29日 下午4:01
下一篇 2022年6月29日 下午4:01

相关推荐

发表评论

登录后才能评论