代码之家  ›  专栏  ›  技术社区  ›  SwiftyJD

如何检查一个视图是否位于另一个视图的顶部?

  •  5
  • SwiftyJD  · 技术社区  · 7 年前

    if atmLabel.center < CGPoint(x: 156, y: 570) {
        buttonView.dropShadow(shadowOpacity: 0.5)
    }
    
    3 回复  |  直到 7 年前
        1
  •  10
  •   Dominik Bucher    7 年前

    对于点检查,您应该使用

    包含CGRect的函数。。。简而言之,这应该行得通

     let view = UIView()
     let label = UILabel()
    
     if label.frame.contains(view.frame) {
        //Do your stuff...
     }
    

    enter image description here

    或者,只需在当前viewController子视图上打印即可

    print(self.view.subviews)
    

    这将打印出按视图上图层的升序排序的UIView子类数组。。。我推荐第一种调试方法:)

        2
  •  9
  •   Charles Srstka    7 年前

    如果您想查看两个视图在代码中是否重叠,我认为应该这样做:

    if view1.frame.intersects(view2.frame) {
        // handle overlap
    }
    
        3
  •  5
  •   ManWithBear    6 年前

    您的视图层次结构:

    parentView
    - scrollView
    - - label
    - topView
    

    https://developer.apple.com/documentation/uikit/uiview/1622621-frame

    你不能简单地比较 label topView 因为 frame 在superview坐标中的位置是aka吗 topView.frame 在中 parentView label.frame 在中 scrollView 协调。

    所以你需要转换 滚动视图 协调。让我们来看第一个变体:

    let frameInParent = parentView.convert(label.frame, from: label.superview)
    

    之后,您可以检查此帧是否与 俯视图 的:

    let isOverlaps = frameInParent.intersects(topView.frame)