- (CGRect)convertRect:(CGRect)rect toView:(nullable UIView *)view

Posted

技术标签:

【中文标题】- (CGRect)convertRect:(CGRect)rect toView:(nullable UIView *)view【英文标题】: 【发布时间】:2016-10-14 08:57:25 【问题描述】:
UIView *sourceView = self.sourceImagesContainerView.subviews[self.currentImageIndex];
UIView *parentView = [self getParsentView:sourceView];
CGRect rect = [sourceView.superview convertRect:sourceView.frame toView:parentView];
NSLog(@"%@",NSStringFromCGRect(rect));

在tableView中用来获取imageView的位置到另一个view,但是当我滑动tableView的时候,rect是错误的。

我不知道如何处理。

【问题讨论】:

多么糟糕的标题! 欢迎来到 SO。请查看the tour。您可能还想查看What topics can I ask about、How to ask a good question 和The perfect question,以及如何创建Minimal, Complete and Verifiable example。发布您尝试过的代码和您收到的错误。尽可能具体,因为它会带来更好的答案。 【参考方案1】:

除非您准备减去 contentOffset,否则不能将 tableView 用作此转换的父级。

UIView *sourceView = self.sourceImagesContainerView.subviews[self.currentImageIndex];
UITableView *parentView = self.tableView;
CGRect rect = [sourceView.superview convertRect:sourceView.frame toView:parentView];
rect = CGRectOffset(rect, 0-parentView.contentOffset.x, 0-parentView.contentOffset.y);
NSLog(@"%@",NSStringFromCGRect(rect));

最好使用非滚动父项:

UIView *sourceView = self.sourceImagesContainerView.subviews[self.currentImageIndex];
UIView *parentView = self.navigationController.view;
CGRect rect = [sourceView.superview convertRect:sourceView.frame toView:parentView];
NSLog(@"%@",NSStringFromCGRect(rect));

【讨论】:

以上是关于- (CGRect)convertRect:(CGRect)rect toView:(nullable UIView *)view的主要内容,如果未能解决你的问题,请参考以下文章

如何在 NSMutableArray 中存储 CGRect 值?

了解 convertRect:toView:、convertRect:FromView:、convertPoint:toView: 和 convertPoint:fromView: 方法

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

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

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

OC convertRect