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 - 在窗口中获取视图的位置?的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI 中如何获取任意视图触摸位置(全局或局部)的坐标