【发布时间】:2021-02-20 22:08:04
【问题描述】:
由于某种原因,我很难理解 convert(_:to:) 和 convert(_:from:) 之间的区别。
假设我有两个视图(superView 和 subview)和一个根视图:
let superView = UIView(frame: CGRect(origin: .init(x: 25, y: 25), size: CGSize(width: 100, height: 100)))
rootView.addSubview(view)
let subview = UIView(frame: CGRect(origin: .init(x: 25, y: 25), size: .init(width: 50, height: 50)))
superView.addSubview(subview)
convert(_:to:)根据documentation将接收者坐标系中的一个点转换为指定视图的坐标系:
let convertToWindow = subview.convert(subview.bounds, to: window)
// {x 50 y 50 w 50 h 50 }
convert(_:from:) 根据documentation 将一个点从给定视图的坐标系转换为接收器的坐标系:
let convertFromWindow = subview.convert(subview.bounds, from: window)
// {x -50 y -50 w 50 h 50 }
在这种情况下是“接收者”subview 吗?如果是这样,我想我有点理解convert(_:from:) 将subview 的坐标相对于自己的坐标(而不是它的超级视图)转换为window 内的位置,这就是为什么它从@987654336 @到{x 50 y 50 w 50 h 50 }。
但是,convert(_:from:) 在转换已经使用subview 坐标系的subviews.bound 时,它在做什么?为什么subview.convert(subview.bounds, from: window) 不返回{x 0 y 0 w 50 h 50 }?
最后,如果convert 方法只是将点或边界与视图进行转换,为什么该方法所属的实例会对转换结果产生影响?例如,subview.convert(subview.bounds, to: window) 和 superView.convert(subview.bounds, to: window) 会产生不同的结果。
【问题讨论】:
标签: ios objective-c swift uiview