2009-09-23 4 views
176

UIView의 위치는 분명히 view.center 또는 view.frame 등으로 판단 할 수 있지만 즉각적인 수퍼의에이은과 관련하여 UIView의 위치를 ​​반환 내에있는 UIView의 위치를 ​​가져옵니다.아이폰 - 전체 UIWindow

전체 320x480 좌표계에서 UIView의 위치를 ​​결정해야합니다. 예를 들어, UIViewUITableViewCell 인 경우 슈퍼 뷰와 상관없이 창의 위치가 크게 바뀔 수 있습니다.

가능하다면 어떤 아이디어가 있습니까?

건배 :) 쉬운 하나

답변

300

:

[aView convertPoint:localPosition toView:nil]; 

은 ... 지역에 지점이 창을 좌표로 공간 좌표로 변환합니다. 이 같은 윈도우 공간에서 뷰의 원점을 계산하기 위해이 방법을 사용할 수 있습니다 :

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

2014 편집

:이 Matt__C의 코멘트의 인기를 보면 그 좌표를 지적하는 것이 합리적인 것 같다 ...

  1. 기기를 돌릴 때 변경되지 않습니다.
  2. 은 항상 회전되지 않은 화면의 왼쪽 상단 모서리에 있습니다.
  3. 입니다. : 좌표계는 창의 경계로 정의됩니다. 화면과 장치 좌표계가 다르므로 창 좌표와 섞어서는 안됩니다.
  4. 스위프트에서
+0

멋진 :) 나는 그것이 간단해야 생각 그러나 사과가 그렇게 쉽게주지 않을 것 같은 느낌이 들었습니다 ... 잘했습니다. 덕분에 –

+0

나는 다른 질문을 추가 - 그것은 나를 위해 시뮬레이터에서 작동하지만 실제 장치에서 작동하지 않습니다. ( –

+0

다른 질문이 있습니다. http://stackoverflow.com/q/6013766/531527 –

22

: 스위프트

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

4 : 확장자

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

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