【问题标题】:ConvertRect doesn't work as expectedConvertRect 不能按预期工作
【发布时间】:2016-12-16 10:29:14
【问题描述】:

我正在尝试将深层“子视图”框架转换为上层“UIView”。我在这里附加视图层次结构。

附上插图:

我试过这个,但结果离屏幕很远:

let rect = smallSubview.convert(smallSubview.frame, to: bigSuperview)

我正在尝试将小的“Subview”帧转换为“VideoCrop”/bigSuperView 坐标空间。有什么建议么?谢谢!

【问题讨论】:

  • 请查看我的更新答案以澄清您的评论

标签: ios swift uiview converter


【解决方案1】:

不确定,但您不应该考虑边界而不是 smallSubView 的框架吗??

我的意思是:

let rect = smallSubview.convert(smallSubview.bounds, to: bigSuperview)

编辑

我无法回答您的评论,因此更新了我的答案:)

convert API 快速查看建议

func convert(_ rect: CGRect, to view: UIView?) -> CGRect 说明
将接收方坐标系中的矩形转换为 另一种看法。

参数

rect 本地指定的矩形 接收器的坐标系(边界)。

view 视图 转换操作的目标。如果视图为零,则此方法 而是转换为窗口基坐标。否则,查看和 接收者必须属于同一个 UIWindow 对象。

正如它所暗示的,您应该考虑边界而不是框架:)

那么frame和bounds有什么区别呢??

Bounds : 指定视图在其自己的坐标系中的位置和大小。 Frame:虽然这指定了视图在其 superViews 坐标系中的位置和大小:)

因此,任何视图的边界都将其原点为 (0,0),其中框架的 x 和 y 相对于其父视图 :) 而高度和宽度相同:)

【讨论】:

  • 流畅。作品!你能解释一下为什么我们应该使用边界而不是框架吗?边界原点将始终为 0,0。
  • 太棒了。谢谢桑迪普! :) 应该更仔细地阅读文档。哈哈。祝你有美好的一天!
猜你喜欢
  • 2015-06-26
  • 2013-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多