이번 학습은 frame과 bounds의 마지막시간인 도대체 언제 쓰면되는지 를 학습해보자.
frame
앞의 학습 내용으로 정리하면 frame의 origin(위치)는 superview 좌표계를
기준으로 한 view의 원점이고 size(크기)는 view 영역을 모두 감싸는 사각형의 크기이다.
그렇다면 이런 성질들은 어디에 쓰일까 ??
View의 위치와 크기를 설정할 때 사용한다.
단순히 View를 생성하는데 사용된다.
let myView: UIView = .init(frame: ...)
bounds
앞의 학습 내용으로 정리하면 bounds의 origin(위치)는 자신의 좌표계를 나타내며
size(크기)는 View 영역 자체의 size이다.
오직 자신에게만 집중할 수 있어 사용되는 곳이 frame보다는 다양한데 하나씩 살펴보자.
1) view가 회전한 후에도 view의 실제 크기를 알고 싶을 때
아래 글에서 이미 확인 했으므로 별도 설명 없이 넘어가자.
2) view 내부에 그림을 그릴 때 사용된다.
정확한 설명은 아직 내부에서 draw관련 함수를 사용해 본적이 없어 힘들지만
단순히 생각했을 때 view 내부에서 그리는데 superview의 좌표계는 불필요하기 때문에 frame보다는
bounds가 더 적절한 것 같다.
3) UIScrollView에서 스크롤 시 사용된다.
이전 학습 내용을 통해 우리는 bounds를 옮기는 의미가 무엇인지 정확히 알고있다.
보이는 viewport의 좌표를 옮기는 것 그렇다면 UIScrollview에 이 특징이 어떻게 이용되고 있을까??
보통 scroll은 현재 보여지는 화면보다 많은 데이터가 존재할 때 사용한다.
그렇다는 것은 어떤 것을 움직여서 다른 화면으로 보여지는 동작이 필요하고
여기서 움직여지는 어떤것은 바로 viewport이다.
다음은 내가 하고 있는 왁뮤의 스크롤 화면을 통해 이해해 보자.
위 스크롤 동작을 보면 scrollview의 origin 좌표가 계속 움직이면서
subview에 대한 시점 (viewport)가 변경되어 다음 내용 또는 이전 내용을
자유롭게 보여줄 수 있다.
open class UIScrollView : .. {
open var contentOffset: CGPoint // default CGPointZero
..
}
여기서 UIScrollView의 contentOffset 프로퍼티가 바로 ScrollView의 bounds를 설정하는 값이다.
contentOffset = 스크롤뷰의 원점(오리진)과 콘텐츠뷰의 원점(오리진)이 떨어진 정도
scrollView.contentOffset.y == contentViewHeight - scrollViewHeight
이 특징을 이용해서 마지막 컨텐츠 까지에 도달했는 지 알 수 있다.
frame | bounds | |
origin (x, y)의 기준점 | super view의 좌표계 | 자신의 좌표계 |
size (width, heigh) | View의 영역을 모두 감싸는 사각형 | View 영역 자체 |
사용 용도 | View의 위치와 크기를 나타낼 때 | View를 회전한 후 View의 실제 크기를 알고 싶을 때 View 내부에 그림을 그릴 때 (drawRect) - ScrollView에서 스크롤링 할 때 |
참고
'iOS > UIKit' 카테고리의 다른 글
UIGraphics (0) | 2024.09.06 |
---|---|
UIGestureRecognizer (0) | 2024.09.05 |
frame vs bounds (3) [origin, viewport ] (3) | 2024.09.02 |
frame vs bounds (2) [ 정의, 기준점, 크기 계산 방식] (0) | 2024.09.02 |
frame vs bounds (1) [ CGPoint, CGSize, CGRect ] (0) | 2024.09.02 |