UIView convertRect: - 找到两个嵌套视图之间的子视图位置

4
在下面的图片中,每个矩形都是一个UIView。视图A对视图C具有弱引用。视图A创建视图D并需要将其作为子视图添加到视图C中,以使视图A完全覆盖。因此,我需要相对于视图C获取视图A的位置。在{0,0}处将视图D作为视图A的子视图添加不是这种情况的选项 - 它必须是C的子视图。 视图层次结构起点 视图层次结构起点 视图层次结构目标点 视图层次结构目标点 我尝试了各种convertRect:toView:convertRect:fromView:的组合,将这三个视图的组合作为发送器和接收器,以及使用它们的子视图,但是组合太多了,我无法理解它的工作原理。如果有人能首先发布正确的语法,让我可以使其正常工作,并且更重要的是,让我通过一个实际的示例来理解该函数的实际操作,我将不胜感激。非常感谢!
1个回答

4

convertRect: 是正确的方法:

let viewD = UIView()
viewD.frame = viewA.viewC.convertRect(viewA.frame, fromView: viewA.superview!)
viewA.viewC.addSubview(viewD)

在Objective-C中:

UIView *viewD = [[UIView alloc] init];
viewD.frame = [viewA.viewC convertRect:viewA.frame fromView:viewA.superview];
[viewA.viewC addSubview:viewD];

谢谢您的快速回复!我不太理解Swift中的语法... 您知道Objective C的等效语句吗?编辑 - 它会是 viewD.frame = [self.viewC convertRect:self.frame fromView:self.superview];(从viewA的实例方法调用) - mashers
哈哈!原来我是个白痴!根据我上面的评论,将您的Swift示例转换为Objective C后,它完美地运行了。但一开始似乎没有起作用,因为在进行转换之前,我尚未将ViewA添加到ViewB中,所以它的父视图为空,从而在转换过程中返回CGRectZero作为其框架。我将那行代码移到了ViewA添加到视图层次结构的位置之后,现在它完全正常工作了。非常感谢您! - mashers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接