Swi*_*yJD 2 frame scrollview cgpoint ios swift
当前,有一个滚动视图(整个屏幕)位于uiview(屏幕的底部)后面。我正在尝试检查uiview是否覆盖了滚动条上的标签(iphone se会发生这种情况)。有没有办法检查uiview是否覆盖了滚动视图上的标签?我尝试使用中央cgpoint在滚动视图上查看标签是否小于uiview上的一个点,但是它不允许我比较两个cgpoints的大小:
if atmLabel.center < CGPoint(x: 156, y: 570) {
buttonView.dropShadow(shadowOpacity: 0.5)
}
Run Code Online (Sandbox Code Playgroud)
对于点检查,您应该使用
包含CGRect的功能...总之这应该工作
let view = UIView()
let label = UILabel()
if label.frame.contains(view.frame) {
//Do your stuff...
}
Run Code Online (Sandbox Code Playgroud)
或者您可以简单地在当前viewController子视图上打印出来
print(self.view.subviews)
Run Code Online (Sandbox Code Playgroud)
这会打印出按视图上层的升序排序的UIView子类数组。我建议调试的第一种方法:)
如果您想查看代码中是否有两个视图重叠,我认为这应该可行:
if view1.frame.intersects(view2.frame) {
// handle overlap
}
Run Code Online (Sandbox Code Playgroud)
您的视图层次结构:
\n\nparentView\n- scrollView\n- - label\n- topView\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n\n框架矩形,描述了 view\xe2\x80\x99s 在其 superview\xe2\x80\x99s 坐标系中的位置和大小。
\n\nhttps://developer.apple.com/documentation/uikit/uiview/1622621-frame
\n
您不能简单地比较label和 的帧topView,因为frame是 超级视图坐标中的位置,又名topView.frame是parentView坐标 和label.frame是scrollView坐标。
因此,您需要将其转换label为parentView或topView坐标scrollView。让我们使用第一个变体:
let frameInParent = parentView.convert(label.frame, from: label.superview)\nRun Code Online (Sandbox Code Playgroud)\n\n之后您可以检查该框架是否与topView\'s 相交:
let isOverlaps = frameInParent.intersects(topView.frame)\nRun Code Online (Sandbox Code Playgroud)\n\n但这仅在您不在视图上使用任何转换时才成立,因为再次框架文档:
\n\n\n\n警告
\n\n如果变换属性不是恒等变换,则该属性的值未定义,因此应被忽略。
\n
| 归档时间: |
|
| 查看次数: |
3240 次 |
| 最近记录: |