如何在我的触摸位置获得所有UIViews?
在下面的图像中,我需要用黄线接触所有UIViews.
UI层次结构中的代码段:
我在寻找与SpriteKit类似的功能,我们用它来获取所有节点
self.nodes(at: touch.location(in: self))
Run Code Online (Sandbox Code Playgroud)
您必须遍历层次结构中的所有视图,例如:
extension UIView {
func allViews(for touch: UITouch) -> [UIView] {
return self.allViews(at: touch.location(in: self))
}
func allViews(at point: CGPoint) -> [UIView] {
var stack = [UIView]()
var result = [UIView]()
stack.append(self)
while let view = stack.popLast() {
let localPoint = view.convert(point, from: self)
if view.bounds.contains(localPoint) {
result.append(view)
}
stack.append(contentsOf: view.subviews)
}
return result
}
}
Run Code Online (Sandbox Code Playgroud)
您可以从包含所有适当视图(例如视图控制器的视图)或窗口的任何超级视图开始。第二种方法的点必须相对于由 表示的视图的边界self。
| 归档时间: |
|
| 查看次数: |
1219 次 |
| 最近记录: |