728x90
※ 참조
iOS ) Frame과 Bounds의 차이 (1/2)
안녕하세요 :) Zedd입니다. 지금 다른 글을 쓰고있는데, 쓰면 쓸수록 쓸 주제가 많아집니다...급 이 글을 쓰게 됐어요 XD.. 아무튼 오늘은 저도 궁금했던 Frame과 Bounds의 차이를 알아볼거에요 :) 다음
zeddios.tistory.com
Apple Developer Documentation
developer.apple.com
Frame
- 해당 UIView의 SuperView에 대응한 좌표 시스템을 가진다.
- 즉 SuperView의 origin으로 부터의 x좌표, y좌표 거리를 표시해준다.
- frame의 size는 항상 해당 뷰가 들어가있는 사각형 영역의 사이즈를 표시해준다.
- 즉, view를 회전을 했을 때에도 해당 뷰가 들어가는 사각형 영역의 사이즈를 나타낸다.
Bounds
- 해당 UIView 자체의 좌표 시스템을 사용한다.
- 즉 subView들의 위치를 변경하는 좌표시스템
- 그렇기에 항상 origin은 (0, 0)을 나타내고 있다.
- 만약 bounds의 좌표계를 변경하면 해당 위치에서 다시 View를 그리게 된다. (UIView가 이동한다.)
- 좀 더 정확히 말하자면 viewPort의 위치가 변하게 된다. 즉, view를 보여주고 있는 창틀(?)이 이동하는 개념이기 때문에 만약 (50, 50)으로 지정을 하게 되면 최종적으로 subview들이 (-50, -50)만큼 이동하게 되는 결과가 나오게 된다.
- size를 변경하면 frame의 size도 동일하게 변하게 된다.
- frame과 달리 View자체의 size를 나타내기 때문에 view를 회전해도 size는 변하지 않는다.
- ScrollView의 기능을 구현하는 핵심 개념이다.
- 오른쪽으로 Scroll한다면 ScrollView의 x좌표에 양수 값을 준다.
- 왼쪽으로 Scroll한다면 ScrollView의 x좌표에 음수 값을 준다.
frame size vs bounds size 예시
print("origin frame \(redView.frame), bounds \(redView.bounds)")
redView.transform = .init(rotationAngle: .pi / 4)
redView.layoutIfNeeded()
print("rotate frame \(redView.frame), bounds \(redView.bounds)")
- (150, 100) size의 UIView를 생성
- 45도로 회전시킨 후 frame, bounds의 size 비교
회전 후 frame 사이즈
- (176.78, 176.78)로 변경
회전 후 bounds 사이즈
- (150, 100) 유지
frame origin vs bounds origin 예시
let blue = UIView(frame: CGRect(x: 0, y: 0, width: 50, height: 50))
blue.backgroundColor = .blue
redView.addSubview(blue)
blue.center = CGPoint(x: redView.bounds.width / 2, y: redView.bounds.height / 2)
blue.layoutIfNeeded()
- ViewController의 중앙에 redView가 위치
- redView의 중앙에 위치한 blue라는 subview가 존재하는 상황
redView의 frame의 origin 변경
- redView.frame.origin.x를 +20만큼 이동
- redView의 superview에서의 위치가 변경됨
redView의 bounds의 origin 변경
- redView.bounds.origin.x를 +20만큼 이동
- blueView의 x좌표가 -20만큼 이동한 것처럼 보인다.
- viewPort가 이동한 것이기에 보이기만 그렇게 보이는 것일 뿐, 실제 blueView의 frame 좌표값은 변하지 않는다.
728x90
'iOS > 설명' 카테고리의 다른 글
[iOS] 코코아 터치 프레임워크 (Cocoa Touch Framework) (0) | 2021.04.22 |
---|---|
[iOS] present로 화면 이동 시 full screen으로 이동 (0) | 2021.02.03 |
[iOS] UIView의 clipToBounds (0) | 2021.01.21 |
[iOS] UIViewController Life Cycle (생명주기) (0) | 2021.01.20 |
[iOS] UILabel의 text를 top-left 정렬하기 (0) | 2021.01.14 |
댓글