iPhone - 전체 UI에서 UIView 위치 가져오기
의 위치UIView
분명히 결정될 수 있다view.center
또는view.frame
등입니다만, 이것은, 의 위치만을 되돌립니다.UIView
그 직속적인 감시와 관련해서요.
그 위치를 결정할 필요가 있습니다.UIView
320x420 좌표계 전체로 볼 수 있습니다.예를 들어,UIView
에 있다UITableViewCell
슈퍼뷰에 관계없이 윈도우 내의 위치가 극적으로 변경될 수 있습니다.
이것이 가능한지, 어떻게 가능한지에 대한 의견이 있습니까?
그건 쉬운 일이야.
[aView convertPoint:localPosition toView:nil];
... 로컬 좌표 공간의 점을 창 좌표로 변환합니다.이 방법을 사용하여 창 공간에서 다음과 같이 뷰의 원점을 계산할 수 있습니다.
[aView.superview convertPoint:aView.frame.origin toView:nil];
2014년 편집:Matt__C의 코멘트의 인기를 보면 좌표가...
- 장치를 회전할 때 변경하지 마십시오.
- 항상 회전하지 않은 화면의 왼쪽 상단 모서리에 원점이 있습니다.
- 창 좌표:좌표계는 윈도우의 경계에 의해 정의됩니다.화면 및 장치 좌표계는 서로 다르므로 윈도우 좌표와 혼동해서는 안 됩니다.
Swift 5 이상:
let globalPoint = aView.superview?.convert(aView.frame.origin, to: nil)
Swift 3(확장 기능 포함):
extension UIView{
var globalPoint :CGPoint? {
return self.superview?.convert(self.frame.origin, to: nil)
}
var globalFrame :CGRect? {
return self.superview?.convert(self.frame, to: nil)
}
}
Swift의 경우:
let globalPoint = aView.superview?.convertPoint(aView.frame.origin, toView: nil)
다음은 @Mohsenasm의 답변과 Swift에 채택된 @Ghigo의 코멘트를 조합한 것입니다.
extension UIView {
var globalFrame: CGRect? {
let rootView = UIApplication.shared.keyWindow?.rootViewController?.view
return self.superview?.convert(self.frame, to: rootView)
}
}
이 코드가 가장 효과적이었습니다.
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)
}
나에게는 잘 통한다:)
extension UIView {
var globalFrame: CGRect {
return convert(bounds, to: window)
}
}
이것은 나에게 효과가 있었다.
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)
언급URL : https://stackoverflow.com/questions/1465394/iphone-get-position-of-uiview-within-entire-uiwindow
'programing' 카테고리의 다른 글
panda.read_excel에서 헤더마다 행 범위 건너뛰기 (0) | 2023.04.17 |
---|---|
Excel 2007에서 Excel 스프레드시트를 생성하면 "확장자 오류와 다른 파일 형식"이 발생한다. (0) | 2023.04.17 |
문자열에 C++ 문자열이 포함되어 있는지 확인합니다. (0) | 2023.04.17 |
추적되지 않은 파일을 어떻게 저장합니까? (0) | 2023.04.17 |
Swift 2.0 - 2진수 연산자 "|"를 2개의 UIUser Notification에 적용할 수 없습니다.피연산자 (0) | 2023.04.12 |