如何在窗口的参考(objc)中获取子视图框架?

Posted

技术标签:

【中文标题】如何在窗口的参考(objc)中获取子视图框架?【英文标题】:How to get subview's frame in the windows' reference (objc)? 【发布时间】:2017-10-26 12:31:33 【问题描述】:

我已经为我回答的问题找到了某种解决方案,但它不能解决我遇到的问题:

(我在哪里搜索:​​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];

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

问题:有没有办法获得与我在第一个示例中相同的结果,但使用另一种方法?还是有更好的方法?

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

【问题讨论】:

你能试试这个CGRect frame = [self.view.window convertRect:self.view.bounds fromView:self.view];吗? 没用,但我找到了解决方案,所以我会发布它,感谢您的帮助,您让我找到了正确的方法:)! 【参考方案1】:

好消息是我找到了解决方案:

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

我会为像我这样不懂的人解释一下:

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

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

fromView:self.projectTitle];终于是你要获取frame坐标的view了。

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

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

【讨论】:

以上是关于如何在窗口的参考(objc)中获取子视图框架?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取uibutton(UITableViewCell的子视图)相对于整个窗口iOS Objective-C的位置?

如何使用带有两个构造函数的viewmodel的Unity框架显示子窗口?

如何使 MDI 子窗口保持在其兄弟窗口之上?

如何通过JQuery实现子窗口操作父窗口

Qt:子窗口中如何获取主窗体ui中的控件

如何获取 UIView 中特定子视图的计数?