2014-01-20 2 views
1

UIView 안에 몇 가지 UIButton 개의 인스턴스가 있고, 차례로 해당 애플리케이션의 UIView 내에 있습니다. 내가 얻으려고하는 것은 윈도우에 상대적인 버튼 프레임 중 하나의 CGRect입니다.창에 상대적인 UIView의 경계 가져 오기?

예를 들어 내보기가 기본보기와 관련하여 50, 50 인 경우 버튼은 안에 있으며 60, 60을 반환하고 싶습니다.

부모보기를 추적하지 않고 추가하는 등의 쉬운 방법이 있나요?

+0

- (CGRect) convertRect (CGRect) RECT의 toView (UIView의 *) 도면; - (CGRect) convertRect : (CGRect) rect fromView : (UIView *)보기; – Mattias

+0

감사합니다. 어떻게 사용하겠습니까? – Luke

답변

2
UIView *parent = [[UIView alloc] initWithFrame:CGRectMake(50, 50, 50, 50)]; 
UIView *child = [[UIView alloc] initWithFrame:CGRectMake(10, 10, 10, 10)]; 
[parent addSubview:child]; 
[self.view addSubview:parent]; 
NSLog(NSStringFromCGRect([self.view convertRect:child.frame fromView:child.superview])); 

결과 :

{{60, 60}, {10, 10}} 
0

아래 기능을 사용하십시오.

- (CGPoint)convertPoint:(CGPoint)point toView:(UIView *)view; 

CGPoint pt = [button convertPoint:CGPointMake(button.frame.origin.x, button.frame.origin.y) toView:yourWindow]; 
3

당신은 -[UIView convertRect:toView]-[UIView convertRect:fromView:]을 사용하여 다른 뷰의 좌표 시스템에 구형 영역을 변환 할 수 있습니다.

UIView *outerView = self.navigationController.view; 
UIView *innerView = self.myButton; 

CGRect buttonRect = [self.view convertRect:self.innerView.frame toView:outerView]; 

또한 convertPoint: 방법 동등한 있습니다 : 당신이 당신의 가장 바깥 쪽 볼에 대한 참조가있는 경우

그래서, (당신이 탐색 컨트롤러를 사용하는 경우, 아마도, 그 최보기를 할 수 있습니다). 그렇다면 실제로 변환 할보기를 만드는 경우입니다. 로그

+0

이것은 정말 이상한 결과를주고 있습니다. 문제의 버튼은 수퍼 뷰에서'{162, 0}'에 있고 수퍼 뷰는 기본 뷰에서'{0, 355} '에 있습니다. 그러나, 그것은'{324, 291}'을'convertRect'의 출력으로 사용하고 있습니다. 왜 이것이 될 수 있을까요? – Luke

+0

흠, 그건 이상합니다. 올바른 수퍼 뷰를'convertRect' /'convertPoint'에 전달하고 있습니까? –

+0

내가 아는 한, 그렇습니다. 그것은 메인 뷰 안의 버튼 뷰 내부에 있으며'CGPoint centerOfButtonInSuperview = [button convertPoint : button.center toView : self.view];를 호출합니다. – Luke

관련 문제