private func getCoordinate(_ view: UIView) -> CGPoint {
var x = view.frame.origin.x
var y = view.frame.origin.y
var oldView = view
while let superView = oldView.superview {
x += superView.frame.origin.x
y += superView.frame.origin.y
if superView.next is UIViewController {
break //superView is the rootView of a UIViewController
}
oldView = superView
}
return CGPoint(x: x, y: y)
}
view.layoutIfNeeded() // this might be necessary depending on when you need to get the frame
guard let keyWindow = UIApplication.shared.windows.first(where: { $0.isKeyWindow }) else { return }
let frame = yourView.convert(yourView.bounds, to: keyWindow)
print("frame: ", frame)
8条答案
按热度按时间83qze16e1#
这很简单
...将局部坐标空间中的点转换为窗口坐标。您可以使用此方法计算窗口空间中视图的原点,如下所示:
1.旋转器械时不要改变。
1.始终使其原点位于未旋转屏幕的左上角。
1.是窗口坐标:坐标系由窗口的边界定义。屏幕和设备的坐标系不同,不应与窗口坐标混淆。
byqmnocz2#
雨燕5+:
liwlm1x93#
Swift 3,带扩展名:
yrwegjxp4#
在Swift中:
pbwdgjma5#
下面是@Mohsenasm的回答和@Ghigo的评论,它们被Swift采纳
9bfwbjaz6#
对我来说,这个代码工作得最好:
nnvyjq4y7#
这对我很有效
cdmah0mi8#
对我来说效果很好:)