我有一个UIView,在点击后会显示一个弹出窗口。 弹出窗口需要添加到主UIWindow中,以确保它在其他所有内容之上。
我希望这个弹出窗口的位置与我的UIView相关,所以我需要知道我的UIView在窗口中的相对位置。
问题:当UIView不是直接在UIWindow中时(如果在我的viewController视图中),如何在UIWindow中找到UIView的位置?
答案 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;