1

我有taskView一个类的实例,它是 UIView 的子类。此实例UIScrollView位于位置 (0, 50) 中,并且UIScrollView位于 self.view 中。问题是:如何检查taskView屏幕的位置?我想检查这个元素的全局位置。像 taskView 这样的元素是UIScrollView.

4

2 回答 2

3

这应该让你taskView在整个窗口的坐标中的位置(原点):

UIWindow *window = [[UIApplication sharedApplication] keyWindow];
CGPoint p = [taskView convertPoint:taskView.bounds.origin toView:window];
于 2012-10-12T14:58:43.453 回答
3

您可以使用以下方法在视图之间转换坐标:

因此,要将视图的框架转换为相对于某些更高级别的父视图,您可以使用以下代码:

UIView *someParentView;
UIView *childView;

CGRect frameRelativeToParent = [childView convertRect:childView.bounds
                                               toView:someParentView];

两个视图都需要属于同一个视图层次结构(即它们需要存在于同一个窗口中)。

如果您nil为这些方法的第二个参数指定,您将处理基本窗口坐标。

UIWindow在(例如)上也有相应的方法convertRect:toWindow:用于在窗口之间转换坐标。当您nil在此处指定第二个参数时,您正在处理屏幕坐标。您需要处理屏幕坐标的一个地方是处理键盘通知时。键盘的框架以屏幕坐标提供给您,因此您必须使用这些方法将它们转换回窗口坐标,然后才能使用它们。

于 2012-10-12T14:59:48.023 回答