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