iOS View는 on-demand Drawing Model입니다
on-demand Drawing Model 개념
-
뷰는 다양한 컨텐츠를 표시하는데 매번 다시 그리는 것은 비효율적이라서
-
Generating bitmap cache를 사용합니다.
-
처음에 뷰를 생성할때
-
이후 컨텐츠가 변경되지 않고 단순히 크기나 위치가 변경된다면 다시 그리지 않고 캐시를 호출합니다.
-
크기나 위치가 변경( 캐시호출) 되거나 뷰가 교체( 다시그리기)될때
-
bitmap cache 를 재사용하는 방법
- Content Mode
- 기본값 = Scale To Fill - 항상 프레임의 크기에 이미지를 맞춥니다 ( 종횡비 변경가능성 )
- Aspect Fit - 이미지의 크기를 프레임의 높이에 맞춥니다
- Content Mode
View의 역할
- 화면에 contents를 출력하는 것( 고유한 프레임을 가지고 있고 모든 작업은 프레임내부에서 출력됩니다. 프레임 외부에서 출력되면 잘라낼수 있습니다)
- Handling Touch Events 터치 이벤트를 처리하는 것 - 뷰에서 직접처리, 슈퍼뷰에 전달 Label, ImageView 처럼 터치이벤트를 처리하지 않는 뷰는 속성을 통해 활성화 할수있습니다
- Laying out Subviews 서브뷰의 배치를 관리하는 것 입니다.
- 뷰계층에서 가장아래에 있는 것은 superview이고 위로 쌓일수록 subview가 늘어납니다 뷰는 서브뷰 여러개를 가질수 있지만 superview는 반드시 하나입니다.
- 슈퍼뷰는 서브뷰를 배열로 관리합니다.
- 서브뷰는 항상 슈퍼뷰의 속성에 영향을 받습니다. (이동, 슈퍼뷰의 투명도 등)
View의 좌표체계
-
기준점은 왼쪽 위가 0, 0 이됩니다.
-
모든 위치와 단위는 포인트를 사용합니다.
-
각 컨텐츠는 지역좌표를 가지고 있고 안의 컨텐츠를 표시할때는 고유의 지역좌표를 사용하지만 해당뷰의 위치를 지정할때는 슈퍼뷰의 지역좌표를 사용합니다.
-
뷰의 위치와 크기를 하나로 묶어 프레임이라 합니다
Frame
Struct CGRect {
var origin: CGPoint // 원점
var size: CGSize // 사이즈
}
// 좌표를 통해위치를 지정
Struct CGPoint {
var x: CGFlat
var y: CGFlat
}
// 크기를 지정
Struct CGSize {
var width: CGFloat
var height: CGFloat
}
var frame: CGRect
- Frame 과 Bounds
- Frame - 뷰안에서 컨텐츠의 위치와 크기 표현
- Bounds - 뷰의 지역좌표 내에서 뷰의 크기를 표현합니다.
'IOS > iOS' 카테고리의 다른 글
[TIL] iOS. MVVM without Rxswift (0) | 2020.11.20 |
---|---|
iOS. 유효성 검사 포맷( Validation Check ) (0) | 2020.11.18 |
[TIL] iOS. Button (0) | 2020.11.14 |
iOS. Delegate, Protocol 이란 무엇인가. (0) | 2020.11.04 |
[TIL] iOS. APPlifecycle (0) | 2020.10.31 |