【问题标题】:convertPoint toView not getting absolute position on screenconvertPoint toView 没有在屏幕上获得绝对位置
【发布时间】:2013-12-19 22:31:44
【问题描述】:

我已多次阅读此iPhone - Get Position of UIView within entire UIWindow 和其他内容,但无法让我的应用向我输出屏幕上某些内容的绝对位置。

我有一个滚动视图正在跳跃,我正在尝试找出原因。我希望能够检查它在屏幕上的位置(而不是相对于其父视图的框架)。我尝试了以下方法:

CGPoint point = [scrollView.superview convertPoint:scrollView.frame.origin toView:nil];
NSLog(@"point is %f", point.y);

然而控制台显示 0 作为滚动视图的 Y 位置,尽管滚动视图实际上不在我的屏幕上,但它大约下降了三分之一。这种方法不会给你某物在绝对的、整个 320x568 屏幕中的位置吗?我敢肯定它很小,但有人能指出我缺少什么吗?

【问题讨论】:

  • 你确定是滚动视图本身,而不是它的内容在屏幕上跳转?您的窗口是否占据了整个屏幕?
  • 感谢您的帮助!我之前曾想过这一点,所以我在笔尖中对滚动视图进行了着色以确保它实际上是滚动视图本身在四处移动。我只是想在屏幕上捕捉绝对位置很容易,但我必须有其他事情发生,以防止 convertPoint 工作
  • 你在什么地方尝试获取屏幕坐标?是否在 viewDidLoad 中?
  • 我尝试了几个地方(不是 viewdidload),但也许这就是我的问题。我可以尝试找到运行的最后一个方法以获得它的最终位置
  • 如果你在启动时显示滚动视图,你可以在 viewDidAppear 中试试这个。

标签: ios iphone objective-c uiview uiwindow


【解决方案1】:

UIScrollView 有一个名为contentOffset 的属性。如果您想知道绝对位置,您需要获取视图的位置(即在滚动视图中)并减去滚动视图的contentOffset

【讨论】:

  • 非常感谢您的回复。我实际上是在尝试获取滚动视图本身的位置,其中没有任何内容。如果我只想要滚动视图在屏幕上的位置,我还需要考虑偏移吗?
  • 不,偏移量只影响滚动视图的子视图。
【解决方案2】:
UIView *parentview = [[UIApplication sharedApplication] 窗口].rootViewController.view CGPoint point = [parentview convertPoint:scrollView.frame.origin toView:nil]; NSLog(@"point is %f", point.y);

【讨论】:

  • 非常感谢您的回复。尝试此操作时出现错误。它说“在 NSArray 类型的对象上找不到属性 rootviewcontroller”。
  • @AndrewGray 在 Windows 上使用 Window 代替。你只需要keyWindow。以下是获得它的替代方法。stackoverflow.com/questions/3782066/…
  • 好的,是的,窗口给了我一个例外,但我尝试了关键窗口并运行了。不幸的是,它仍然在控制台中显示 0。我不确定发生了什么事。也许我的笔尖有问题,我得继续挖
  • 您的视图层次结构是什么?您可以使用 UIView 的属性子视图进行检查
  • 滚动视图是 uiview 的子视图,它是主视图的子视图
猜你喜欢
  • 1970-01-01
  • 2011-08-03
  • 2013-08-28
  • 2014-07-07
  • 2014-08-07
  • 2022-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多