UIView.convertPoint 没有按预期工作

Posted

技术标签:

【中文标题】UIView.convertPoint 没有按预期工作【英文标题】:UIView.convertPoint not working as expected 【发布时间】:2015-11-06 20:26:45 【问题描述】:

我试图弄清楚如何在 swift 游乐场中使用 UIView 的 convertPoint 函数。我没有得到我期望的结果,我不知道为什么。

当我尝试时:

import UIKit
let large = UIView(frame: CGRect(x: 0, y: 0, width: 400, height: 400))
let small = UIView(frame: CGRect(x: 0, y: 0, width: 200, height: 200))
let point = CGPoint(x: 200, y: 200)
large.convertPoint(point, toView: small)

我希望:x: 100, y: 100

我实际上得到了:x: 200, y: 200

我错过了什么?

【问题讨论】:

convertPoint 仅在将两个视图都添加到某个父视图时才有效。由于您从未添加任何视图,因此转换毫无意义。 【参考方案1】:

将您的代码(小视图)更改为

let large = UIView(frame: CGRect(x: 0, y: 0, width: 400, height: 400))
let small = UIView(frame: CGRect(x: 20, y: 20, width: 200, height: 200))
let point = CGPoint(x: 200, y: 200)
let convertedPoint = large.convertPoint(point, toView: small)
print(convertedPoint)

打印出来:(180.0, 180.0)

这是完全正确的。看一下图片:

如您所见,红点位于大 - 深灰色 - 视图的 200、200(正好在中间)和小 - 浅灰色 - 视图的 180、180(靠近右下角)。

如果我们现在回到您的示例,小视图的原点位于 0, 0 而不是 20, 20,则红点位于大视图的 200, 200(正好在中间)以及 200, 200 (正好在小视图的右下角)。看:

所以你得到的输出完全有意义!希望我能帮上忙……

【讨论】:

以上是关于UIView.convertPoint 没有按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

为啥脚手架没有按预期工作?

为啥响应式表没有按预期工作?

为啥我的替换没有按预期工作[重复]

为啥我的查询没有按预期工作?

否定字符没有按预期工作? ^

VueRouter 没有按预期加载组件