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的这个视图覆盖。
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