如何在windows的引用(objc)中获取子视图的框架?

时间:2017-10-26 12:31:34

标签: ios objective-c

Hy,我已经找到了我回答的问题的某种解决方案,但它并没有解决我遇到的问题:

(我搜索的地方:Get position of UIView in respect to its superview's superview

How to get the frame of a view inside another view?

iOS - Get location of a view in a window? ......等等)

我写了那段代码:

CGRect targetFrame = [self.view convertRect:self.buttonImageView.frame
                                           fromView:self.view];
CGRect superView1Frame = [self.view convertRect:self.buttonImageView.superview.frame
                                           fromView:self.view];
CGRect superView2Frame = [self.view convertRect:self.buttonImageView.superview.superview.frame
                                           fromView:self.view];

targetFrame.origin.y = targetFrame.origin.y + superView1Frame.origin.y + superView2Frame.origin.y;
targetFrame.origin.x = targetFrame.origin.x + superView1Frame.origin.x + superView2Frame.origin.x;

效果很好,我可以得到我想要的目标框架。

但是,事实是代码非常难看,我确信还有另一种方法可以做到这一点。我已经尝试过这样的事情了:

CGRect targetFrame = [self.wallButtonImage.superview.superview convertRect:self.wallButtonImage.frame
                                                                          fromView:self.buttonImageView.superview.superview];
return [self.wallButtonImage.superview.superview convertRect:targetFrame
                                                            fromView:self.buttonImageView.superview.superview];

但它根本不起作用......

问题:有没有办法获得与我在第一个例子中使用的结果相同但使用其他方法的结果?或者有更好的方法吗?

另外,我无法理解为什么我找不到任何其他解决方案,所以你能解释一下你会做什么吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

好的事实是我找到了解决方案:

CGRect targetFrame = [self.view convertRect:self.projectTitle.bounds fromView:self.projectTitle];

我会为那些不理解我的人解释一下:

  • [self.view是您要获取框架坐标的视图。

  • convertRect:self.projectTitle.bounds这是您想要获取框架坐标的视图边界。

  • fromView:self.projectTitle];最后是您想要获取框架坐标的视图。

  • 所以targerFrame是窗口坐标参考中初始视图的框架。

我确实错过了第三个参数,这就是我错的原因!