convertRect 获取超级视图中的相对位置

Posted

技术标签:

【中文标题】convertRect 获取超级视图中的相对位置【英文标题】:convertRect to get relative position in super view 【发布时间】:2012-09-05 00:05:18 【问题描述】:

我有一堆放在 UIViewController1 中的水平 UITableView。我想找到被点击的 UITableViewCell 的位置,我想根据 UIViewController1 获得位置。所以这就是我在 didSelectRowAtIndexPath 中所做的:

MyCell *cell = (MyCell *)[tableView cellForRowAtIndexPath:indexPath];

                UIView *animatedView = [[UIView alloc] initWithFrame:cell.frame];
 [animatedView setFrame:[animatedView convertRect:animatedView.frame toView:self.newsRackController.view]];

但是,这似乎不能正确转换它。我做错了什么?

【问题讨论】:

检查this answer。 【参考方案1】:

您需要从 UITableView 的视图中转换 UITableViewCell 的 CGRect,然后再将其转换为您的视图控制器视图。

但除了这些,也许你可以使用 UITableView 的方法

- (CGRect)rectForRowAtIndexPath:(NSIndexPath *)indexPath

获取此 CGRect 并将其转换为您的 UIViewController 的视图。

【讨论】:

谢谢,很好的回答! 对我来说,这个解决方案没有考虑 contentOffset 或 contentInset。【参考方案2】:

这是因为animatedView 不属于任何父母,而您将frame 用作bounds。您应该首先找到框架并相应地初始化animatedView

MyCell *cell = (MyCell *)[tableView cellForRowAtIndexPath:indexPath];
CGRect animatedViewFrame = [tableView convertRect:cell.frame toView:self.newsRackController.view];
UIView *animatedView = [[UIView alloc] initWithFrame:animatedViewFrame];

【讨论】:

谢谢!这实际上是对问题的回答。

以上是关于convertRect 获取超级视图中的相对位置的主要内容,如果未能解决你的问题,请参考以下文章

OC convertRect

convertRect:toView 不返回预期的窗口坐标

获取相对于其父级的对话框中的视图位置

iOS 视图在不同View之间的切换(对于convertRect:函数的一些理解)

convertRect:toView:返回两倍大小和与原点的距离的两倍

iOS - 在窗口中获取视图的位置?