티스토리 뷰


1. Frame & Bound

UIView 는 특정 UIView 의 자식 요소로 포함됨으로써 화면에 표시된다.

자식 요소로 추가될 UIView 는 자신이 보여질 위치와 크기가 결정되어야한다.


자식 요소 위치의 기준점은 부모요소의 기준점으로부터 계산된다.

frame 의 좌표는 부모 View 가 기준이므로 origin 위치가 절대값이 아니라는 말과 동일하다.

아래 사진에서 흰색 rect 의 frame 은 아래와 같다.


frame : 10.000000, 10.000000, 100.000000, 100.000000


UIView 는 frame 외에 bounds 속성을 가진다. 

두 속성 모두 CGRect 타입으로 위치와 크기를 나타내지만 의미하는 바가 다르다.


bounds 는 자신을 기준으로 한다. 위 흰색 rect 의 (x,y) 는 (0,0) 을 가진다. 

일반적으로  bounds 값은 (0,0,width,height) 이다.


frame  속성은 UIView 위치나 크기를 설정하는 경우에 사용하고, 

bounds 속성은 자신의 내부에 뭔가를 그릴 때나 자신 영역 내에 

어느 위치가 터치되었는가를 판정하는 경우 사용한다.



2. Contain Point

BOOL isContainPoint = CGRectContainsPoint(_whiteView.frame, CGPointMake(10, 10));


CGRectContainsPoint 를 이용하면 특정 point 가 rect 에 포함되는지 여부를 알 수 있다.

이때도 절대적인 좌표가 아닌 단순히 _whiteView.frame 기준으로만 판별한다.



추가적으로 UIGestureRecognizer 를 이용했을 때 Tap 한 Point 가 

원하는 View 내부에 있는지 확인하기 위해서는, UIGestureRecognizer 의 locationInView 를 이용하면 된다.


CGPoint point = [recognizer locationInView:self.whiteView];

if (CGRectContainsPoint(self.whiteView.bounds, point)) {

    //포함됨.

}



3. Convert Point


A 기준의 C 좌표를 B 기준으로 변환하면 ,


(Cxb, Cyb) = [A convertPoint:(Cxa,Cya) toView:B];


반대로 B 기준의 C 좌표를 A 기준으로 변환하면,


(Cxa, Cya) = [A convertPoint:(Cxb, Cyb) fromView:B];


좌표 CGPoint 외에 CGRect 도 변환 가능하다. 메소드는 다음과 같고 사용법은 위와 동일하다.


convertRect: toView;

convertRect: fromView:





출처 및 참고자료


https://soulpark.wordpress.com/2012/11/30/uiview-frame-bounds-coordinate-conversion/





공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함