将屏幕坐标转换为UIView本地点

5

我看过很多关于如何将UIView的本地坐标转换为屏幕坐标的示例。例如,

CGPoint subContentLocalPoint = subContent.frame.origin ;
CGPoint basePos = [subContent convertPoint:subContentLocalPoint toView:nil] ;

但是如何做相反的事情呢?(即将屏幕坐标转换为UIView本地点。) 例如,

屏幕坐标 - x:90 y:100 UIView内容 - x:0 y:0 //因为这是UIView对象在屏幕上的位置。


1
toView: 更改为 fromView: - rmaddy
还要注意,视图坐标和屏幕坐标之间的转换是一个两步过程。convertPoint:toView:convertPoint:fromView: 分别转换为和从窗口坐标。您仍然需要使用正确的 UIWindow 上的 convertPoint:toWindow:convertPoint:fromWindow: 将这些窗口坐标转换为/从屏幕坐标。 - fluidsonic
@fluidsonic OP 正在询问屏幕坐标,而不是窗口坐标。因此,传递 nil 并使用一个转换就足够了。即使转换是从 UIViewUIWindow 或从 UIWindowUIView,也可以在一步中完成。只需将窗口作为视图的 to/from 参数传递即可。 - rmaddy
@rmaddy 是的,他正在询问屏幕坐标。但是他使用的方法会转换为窗口坐标,这可能会有所不同。窗口坐标和屏幕坐标并不相同。 - fluidsonic
@fluidsonic 对的。我之前认为nil视图指的是屏幕坐标,而不是窗口坐标。我的错。 - rmaddy
2个回答

6

屏幕坐标转换为特定视图坐标:

UIView* specificView = ...;
CGPoint pointInScreen = ...;
CGPoint pointInWindow = [specificView.window convertPoint:pointInScreen fromWindow:nil];
CGPoint pointInView = [specificView convertPoint:pointInWindow fromView:nil];

1
如果您想从subContent的位置获取屏幕位置,请尝试以下方法:
[subContent convertPoint:subContentLocalPoint fromView:[UIApplication sharedApplication].keyWindow];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接