Ios 在视图坐标系之间转换点

Ios 在视图坐标系之间转换点,ios,objective-c,swift,uiview,Ios,Objective C,Swift,Uiview,出于某种原因,我很难理解convert_u∶to:和convert_∶from:之间的区别 假设我有两个视图superView和subview以及一个根视图: 让superView=UIViewframe:cDirectorigin:.initx:25,y:25,大小:CGSizewidth:100,高度:100 rootView.addSubviewview 让子视图=UIViewframe:cDirectorigin:.initx:25,y:25,大小:.initwidth:50,高度:50

出于某种原因,我很难理解convert_u∶to:和convert_∶from:之间的区别

假设我有两个视图superView和subview以及一个根视图:

让superView=UIViewframe:cDirectorigin:.initx:25,y:25,大小:CGSizewidth:100,高度:100 rootView.addSubviewview 让子视图=UIViewframe:cDirectorigin:.initx:25,y:25,大小:.initwidth:50,高度:50 superView.addSubviewsubview 转换:将点从接收器的坐标系转换为指定视图的坐标系,根据:

让convertToWindow=subview.convertsubview.bounds,到:窗口 //{x50y50w50h50} 转换:从:根据以下公式将点从给定视图的坐标系转换为接收器的坐标系:

让convertFromWindow=subview.convertsubview.bounds,from:window //{x-50 y-50 w 50 h 50} 在这种情况下,是否为receiver子视图?如果是这样的话,我想我有点理解convert_u10;:from:将子视图的坐标,相对于is自身的坐标,而不是它的超级视图,转换到窗口中的位置,这就是为什么它从{x0y0w50h50}转换到{x50y50w50h50}

但是,当转换已经使用子视图坐标系的subview.bound时,convert_u10;:from:在做什么?为什么subview.convertsubview.bounds,from:window不返回{x0y0w50h50}


最后,如果convert方法仅将一个点或一个绑定转换为一个视图,为什么该方法所属的实例会对转换结果产生影响?例如,subview.convertsubview.bounds、to:window和superView.convertsubview.bounds、to:window会产生不同的结果。

接收方确实是您进行调用的对象

从这个接收者的角度来看,应该理解方法的名称:

“to”-方法:来自接收器,当进入作为参数给定的视图时,矩形是什么

“from”-方法:朝向接收器,当从作为参数给定的视图中得到矩形时,矩形是什么

换言之:

使用“to”方法可以转到另一个视图。 使用“from”方法,您可以从另一个视图返回。 尝试将其视为在receiver视图和parameter视图之间移动。您(即接收器)可以转到参数视图,然后从参数视图返回


我希望这能有所帮助。

你打电话的对象确实是接受者

从这个接收者的角度来看,应该理解方法的名称:

“to”-方法:来自接收器,当进入作为参数给定的视图时,矩形是什么

“from”-方法:朝向接收器,当从作为参数给定的视图中得到矩形时,矩形是什么

换言之:

使用“to”方法可以转到另一个视图。 使用“from”方法,您可以从另一个视图返回。 尝试将其视为在receiver视图和parameter视图之间移动。您(即接收器)可以转到参数视图,然后从参数视图返回


我希望这能有所帮助。

是的,在类似subview.convert…(子视图转换…)的表达式中,我们称子视图为接收者-它是转换消息发送到的对象,因此它接收该消息

为什么subview.convertsubview.bounds,from:window不返回{x0y0w50h50}

您在这里犯的心理错误是,您认为subview.bounds会以某种方式将此值固定到subview。没有。第一个参数只是一些数字。convert方法不知道这些数字是从哪里来的。这就是为什么你必须告诉它你从哪里得到它们的原因——使用第二个参数:

如果你说from:,你是说,我从第二个参数的坐标系中得到了这些数字

如果你说:,你是说,我从接收器的坐标系中得到了这些数字

为什么方法所属的实例会对转换结果产生影响

因为这是故事中的另一种观点:

如果你说to:,你是说,我从接收器的坐标系中得到了这些数字,我希望你把它们转换成第二个参数的坐标系

如果你说from:,你是说,我从第二个参数的坐标系得到了这些数字,我希望你把它们转换成接收器的坐标系


记住,第一个参数只是一些数字。你可以从任何你想要的地方得到它们,包括你的大脑内部,但是如果你在表达式的其余部分撒谎,你就不会得到正确的答案-就像你的一些例子那样。

是的,在像subview.convert…这样的表达式中,我们称subview为接收者-它是转换消息发送到的对象,所以它收到了这个信息

为什么subview.convertsubview.bounds,from:window不返回{x0y0w5 0h50}

您在这里犯的心理错误是,您认为subview.bounds会以某种方式将此值固定到subview。没有。第一个参数只是一些数字。convert方法不知道这些数字是从哪里来的。这就是为什么你必须告诉它你从哪里得到它们的原因——使用第二个参数:

如果你说from:,你是说,我从第二个参数的坐标系中得到了这些数字

如果你说:,你是说,我从接收器的坐标系中得到了这些数字

为什么方法所属的实例会对转换结果产生影响

因为这是故事中的另一种观点:

如果你说to:,你是说,我从接收器的坐标系中得到了这些数字,我希望你把它们转换成第二个参数的坐标系

如果你说from:,你是说,我从第二个参数的坐标系得到了这些数字,我希望你把它们转换成接收器的坐标系

记住,第一个参数只是一些数字。你可以从任何你想要的地方得到它们,包括你的大脑内部,但是如果你在表达式的其余部分撒谎,你就不会得到正确的答案——就像你的一些例子所做的那样