Kev*_*vvv 1 objective-c uiview ios swift
我很难理解convert(_:to:)和之间的区别convert(_:from:)由于某种原因,
假设我有两种观点(superView和subview)和一个根视图:
let superView = UIView(frame: CGRect(origin: .init(x: 25, y: 25), size: CGSize(width: 100, height: 100)))\nrootView.addSubview(view)\n\nlet subview = UIView(frame: CGRect(origin: .init(x: 25, y: 25), size: .init(width: 50, height: 50)))\nsuperView.addSubview(subview)\nRun Code Online (Sandbox Code Playgroud)\nconvert(_:to:)根据文档,将接收器\xe2\x80\x99s 坐标系中的点转换为指定视图的点:
let convertToWindow = subview.convert(subview.bounds, to: window)\n// {x 50 y 50 w 50 h 50 }\nRun Code Online (Sandbox Code Playgroud)\nconvert(_:from:)根据文档,将给定视图的坐标系中的点转换为接收器的坐标系:
let convertFromWindow = subview.convert(subview.bounds, from: window)\n// {x -50 y -50 w 50 h 50 }\nRun Code Online (Sandbox Code Playgroud)\nsubview在这种情况下,“接收者”是吗?如果是这样,我想我有点理解将自己的坐标(而不是其超级视图)的坐标convert(_:from:)转换为 中的位置,这就是为什么它从到。subviewwindow{x 0 y 0 w 50 h 50 }{x 50 y 50 w 50 h 50 }
但是,convert(_:from:)当它转换已经subviews.bound使用的坐标系时,正在做什么?为什么不回来?subviewsubview.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)产生不同的结果。
是的,在像 的表达式中subview.convert...,我们将“接收者”称为\xe2\x80\x94,它是消息发送到subview的对象,因此它接收该消息。convert
\n\n为什么不
\nsubview.convert(subview.bounds, from: window)回来{x 0 y 0 w 50 h 50 }?
您在这里犯的心理错误是您认为subview.bounds以某种方式将此值固定到subview. 事实并非如此。第一个参数只是一些数字。该convert方法不知道您从哪里获得这些数字。这就是为什么你必须用第二个参数告诉它你从哪里得到它们 \xe2\x80\x94 :
如果你说from:,你是在说,“我从第二个参数的坐标系中得到了这些数字”。
如果你说to:,你就是在说,“我从接收器的坐标系中得到了这些数字”。
\n\n为什么方法所属的实例会对转换结果产生影响
\n
因为那是故事中的另一种观点:
\n如果你说to:,你是在说,“我从接收器的坐标系中得到了这些数字,我希望你将它们转换为第二个参数的坐标系。”
如果你说from:,你是在说,“我从第二个参数的坐标系中得到了这些数字,我希望你将它们转换为接收器的坐标系。”
请记住,第一个参数只是一些数字。您可以从任何您想要的地方获得它们,包括您的大脑内部,但是如果您在表达式 \xe2\x80\x94 的其余部分中对此撒谎,就像您的一些示例那样,您将不会得到“正确”的答案。
\n