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 没有按预期工作的主要内容,如果未能解决你的问题,请参考以下文章