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

时间:2011-08-11 15:44:51

标签: iphone objective-c ios uiwindow

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

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

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

7 个答案:

答案 0 :(得分:64)

使用可以使用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参数:表示使用窗口而不是特定视图。

希望这有帮助,

戴夫

答案 1 :(得分:12)

您可以让.superview为您转换origin

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

答案 2 :(得分:8)

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

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

答案 3 :(得分:6)

我需要在 Xamarin.iOS

中执行此操作

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

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

答案 4 :(得分:0)

在Xamarin之下。iOS实现对我有用。

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

根据窗口传递所需的视图。

答案 5 :(得分:0)

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 :(得分:-6)

CGRect myFrame = self.superview.bounds;