frame 보러가기
https://jmin-developer.tistory.com/50
[iOS] frame, bounds의 차이 (1/2) - frame
이거 먼저 보고오면 좋음 https://jmin-developer.tistory.com/42 [iOS] CGPoint, CGSize, CGRect 앱만들때 뷰 속성을 건들다 보면 CGSize, CGPoint, CGRect같은 타입이 있잖슴 그거에 대해서 정리할거임ㅇㅇ 1. C..
jmin-developer.tistory.com
지난번에 frame이랑 bounds 중에서 frame에 대해 알아보았고 이번엔 bounds에 대해서 알아볼거임
먼저 frame에 대해서 다시한번 간략하게 보자면
frame에는 origin이랑 size가 있는데
origin은 SuperView의 원점을 (0, 0)으로 두고 원점으로부터 얼마나 떨어져있나를 말하고
size는 view를 감싸는 사각형의 크기를 말한다고 했음
bounds도 frame처럼 origin 및 bounds가 있는데 frame의 그것과는 좀 다름
bouds
bounds는 view의 origin과 size가 자기 자신을 기준으로 계산됨
bounds의 origin
frame의 origin는 SuperView를 기준으로 정해졌잖슴
근데 bounds는 자기 자신을 기준으로 원점이 정해지기때문에 view를 처음 생성하면 무조건 (0, 0)으로 초기화됨

그렇다면 bounds의 origin을 변경하면 어떻게 될것같음?
이게 좀 신기한데 좀 복잡해서 이따가 설명하겠음
bounds의 frame
bounds의 size은 쉬움
frame의 size는 view를 모두 감싸는 사각형의 사이즈를 뜻했잖슴
bounds의 size는 그냥 view 자체의 영역을 뜻하는거임
frame의 size처럼 회전한다고 변하는얘가 아니란거임


size는 이게 끝임ㅇㅇ
origin의 변경
이게 처음보면 좀 이해가 안될수도 있는데 일단 변경한 결과만 보여주자면

이거임
놀랍게도 secondView는 건들지도 않았고 firstView의 origin만 변경한거임
그런데 실제로 움직인 뷰는 바로 secondView임
이걸 어떻게 설명해야하나 고민하다가 생각해낸게 있음
바로 기차 창문을 생각해보는거임
달리는 기차에서 창문을 보고있다 해보자
창문 밖 풍경은 계속 변하지만 창문의 위치 자체는 안변하겠지?

이해가 좀 될려나 모르겠네
그러니까 창밖 풍경을 보는 시점, 창문 그 자체는 안변한다는거임
단, 이동한만큼 바깥 풍경은 변할거임

이해됐다 치고 다시 이 사진을 보자
firstView는 열차의 창문임
firstView의 하위뷰는 창문밖으로 바뀌는 풍경이고
그리고 이 기차는 x축, y축 전부 이동할수 있는 origin이라 생각하면 되는거임
기차가 x축으로 30, y축으로 60만큼 이동했잖슴
그러면 우리가 창문을 바라보는 시점자체는 변하지 않았으니 firstView는 변하지 않았음
대신 바깥풍경이 이동한만큼 다르게 보일테니 secondView가 x축으로 -30, y축으로 -60 만큼 이동돼서 보이는거임
마이너스인 이유는 우리가 정방향으로 간만큼 바깥풍경은 역방향으로 간것처럼 보일거아님ㅇㅋ?
좀 이해가 됐으면 좋겠네
아무튼 정리하자면
기준 | origin | size | |
frame | SuperView | SuperView의 원점기준 얼마나 떨어져 있는지 변경시 하위뷰랑 같이 이동 |
뷰 전체를 감싸는 사각형의 사이즈 뷰를 회전시 달라짐 |
bounds | 자기 자신 | 자기자신 즉, 초기생성시 (0, 0) 변경시 시점의 이동 |
뷰 자체의 사이즈 뷰를 회전시켜도 달라지지 않음 |
이게 참 나는 알고있는 내용이라도 글로 정리하는게 참 어려운것같음
그래도 나름 쉽게 설명할려고 노력했으니 한사람이라도 보고 도움이 됐으면 좋겠음
-끝!-