[iphone] iPhone-전체 UIWindow 내에서 UIView의 위치 가져 오기

a의 위치는 UIView분명히에 의해 결정될 수있다 view.center또는 view.frame등하지만 이것은 단지의 위치를 반환 UIView그것의 즉각적인 수퍼 관련.

UIView전체 320×480 좌표계에서 위치를 결정해야 합니다. (가) 예를 들어, UIViewA의 인 UITableViewCell윈도우 내에서 그것의 위치시킵니다 슈퍼 뷰의 극적 선명하게 촬상 변경 될 수 있습니다.

이것이 가능하다면 어떻게 생각합니까?

건배 🙂



답변

쉬운 일입니다.

[aView convertPoint:localPosition toView:nil];

… 로컬 좌표 공간의 한 점을 창 좌표로 변환합니다. 이 방법을 사용하여 다음과 같이 창 공간에서 뷰의 원점을 계산할 수 있습니다.

[aView.superview convertPoint:aView.frame.origin toView:nil];

2014 편집 : Matt__C의 의견이 인기를 보았을 때 좌표가 …

  1. 장치를 회전 할 때 변경하지 마십시오.
  2. 항상 회전되지 않은 화면의 왼쪽 상단에 원점이 있습니다.
  3. 창 좌표 : 좌표계창의 경계에 의해 정의됩니다. 화면과 장치 좌표계가 다르므로 창 좌표와 섞어서는 안됩니다.

답변

스위프트 5, 스위프트 4 :

let globalPoint = aView.superview?.convert(aView.frame.origin, to: nil)


답변

스위프트 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)
    }
}


답변

스위프트에서 :

let globalPoint = aView.superview?.convertPoint(aView.frame.origin, toView: nil)


답변

여기 @Mohsenasm의 답변과 Swift에 채택 된 @Chigo의 의견이 결합되어 있습니다.

extension UIView {
    var globalFrame: CGRect? {
        let rootView = UIApplication.shared.keyWindow?.rootViewController?.view
        return self.superview?.convert(self.frame, to: rootView)
    }
}


답변