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

Posted

技术标签:

【中文标题】iOS - 在窗口中获取视图的位置?【英文标题】:iOS - Get location of a view in a window? 【发布时间】:2011-08-11 15:44:50 【问题描述】:

我有一个 UIView,它在被点击后会显示一个弹出窗口。 需要将弹出窗口添加到主 UIWindow 以确保它位于其他所有内容之上。

我希望这个弹出窗口的位置是相对于我的 UIView,所以我需要知道我的 UIView 在窗口中的相对位置。

问题:当 UIView 不直接在 UIWindow 中(它在我的 viewController 的视图内)时,如何在 UIWindow 中找到 UIView 的位置?

【问题讨论】:

【参考方案1】:

使用可以使用UIView方法covertRect:toView来转换到新的坐标空间。我做了非常相似的事情:

// Convert the co-ordinates of the view into the window co-ordinate space
CGRect newFrame = [self convertRect:self.bounds toView:nil];

// Add this view to the main window
[self.window addSubview:self];
self.frame = newFrame;

在我的示例中,self 是一个从其 superView 中删除并添加到窗口顶部的视图。 toView 中的 nil 参数:表示使用窗口而不是特定视图。

希望这会有所帮助,

戴夫

【讨论】:

完美。如果需要,有几种方法可以在坐标空间之间进行转换。 当视图在 UIScrollView 内时是否有效 @AntiMoron,是吗?考虑到已经过去的时间,还是您应该遍历从一帧转换到另一帧然后是窗口? 应该可以了,也看到nil参数表示使用窗口而不是特定视图,所以不需要遍历。 不应该把convertRect方法传给self.frame,而不是传self.bounds吗?为什么要转换边界的矩形,它(几乎)总是有原点 0,0?【参考方案2】:

您可以要求您的.superview为您转换您的origin

CGPoint originGlobal = [myView.superview convertPoint:myView.frame.origin 
                                               toView:nil];

【讨论】:

【参考方案3】:

UIView 的 convertPoint:toView: 不起作用吗?所以:

CGPoint windowPoint = [myView convertPoint:myView.bounds.origin toView:myWindow];

【讨论】:

【参考方案4】:

我需要在 Xamarin.iOS

中执行此操作

对于任何在那里寻找解决方案的人来说,最终对我有用的是:

CGRect globalRect = smallView.ConvertRectToView(smallView.Bounds, rootView);

【讨论】:

这很有帮助【参考方案5】:

Swift 5 实用程序

extension UIView 
    var originOnWindow: CGPoint  return convert(CGPoint.zero, to: nil) 

用法

let positionOnWindow = view.originOnWindow

UIScrollView 略有不同

extension UIScrollView 
    var originOnWindow: CGPoint  return convert(contentOffset, to: nil) 

【讨论】:

【参考方案6】:

以下 Xamarin.ios 实现对我有用。

    CGRect GetRectAsPerWindow(UIView view)
    
        var window = UIApplication.SharedApplication.KeyWindow;
        return view.Superview.ConvertRectToView(view.Frame, window);
    

传入您想要相对于 Window 的框架的视图。

【讨论】:

【参考方案7】:
CGRect myFrame = self.superview.bounds;

【讨论】:

ader 如果我是你,我会删除这个答案。很多反对票..

以上是关于iOS - 在窗口中获取视图的位置?的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发中获取视图在屏幕上显示的位置

iOS开发-UIScrollView原理

如何在 Mac OS X 中获取光标相对于窗口的位置?

SwiftUI 中如何获取任意视图触摸位置(全局或局部)的坐标

SwiftUI 中如何获取任意视图触摸位置(全局或局部)的坐标

SwiftUI 中如何获取任意视图触摸位置(全局或局部)的坐标