如何让我的触摸位置上的所有UIViews?
在下面的图像中,我需要用黄线接触所有UIViews.
UI层次结构中的代码段:
我在寻找与SpriteKit类似的函数,我们用它来获取点上的所有节点
self.nodes(at: touch.location(in: self))
解决方法
你必须遍历层次结构中的所有视图:
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 } }
您可以从任何包含所有适当视图(例如视图控制器视图)或窗口的超级视图开始.第二种方法的要点必须是相对于由self表示的视图的边界.