Ch 06. 넷플릭스 스타일 영화 추천 앱 만들기
기능 상세:
- 서로 다른 크기와 형태를 가진 셀의 목록
- 세로 방향은 컨셉별로, 가로 방향은 각각의 컨셉에 속한 컨텐츠들로 구성
활용 기술:
- UICollectionView
- 유연하게 변경 가능한 레이아웃을 사용하여 특정 타입형태로 정렬된 데이터 집합을 표시하는 방법
- 행과 열의 나열 뿐만 아니라 다양한 배열 구현을 가능(격자무늬, 스택형태, 원형 레이아웃, 동적 변경 레이아웃)
- 데이터, 레이아웃 영역이 분리되어 각자 역할에 맞는 정보를 제공, UICollectionView는 두 영역을 종합하여 최종 형태 구축
- 데이터와 해당 데이터를 표시하는 데 사용되는 시각적 요소(layout)를 엄격하게 구분
- 뷰를 가져와서 화면에 배치하는 모든 작업 또한 개발
- UICollectionView 관련 Class와 Protocol
Purpose | Classes/Protocols | Role |
---|---|---|
Top-level containment and management | ⋅UICollectionView ⋅UICollectionViewController |
⋅시각적인 요소 정의 ⋅UIScrollView 상속 ⋅Layout 정보 기반 데이터 표시 |
Content management | ⋅UICollectionViewDataSource ⋅UICollectionViewDelegate |
⋅DataSource: Content 관리 및 Content 표시에 필요한 View 생성(필수) ⋅Delegate: 특정 상황에서 View 동작 custom(선택) |
Presentation | ⋅UICollectionReusableView ⋅UICollectionViewCell |
⋅Header, Footer.. ⋅재사용 가능 |
Layout | ⋅UICollectionViewLayout ⋅UICollectionViewLayoutAttributes ⋅UICollectionViewUpdateItem |
⋅각 항목 배치 등 시각적 스타일 담당 ⋅View를 직접 소유하지 않는 대신 Attributes 생성 ⋅데이터 항목 수정시 UpdateItem 인스턴스 수신 |
Flow layout | ⋅UICollectionViewFlowLayout ⋅UICollectionViewDelegateFlowLayout |
⋅Grid, line-based layout 구현 ⋅레이아웃 정보를 동적으로 Custom |
- Compositional Layout (UICollectionViewCompositionalLayout)
- Advances in Collection View Layout
-
- 구성가능하게
- 복잡한 결과를 단순한 것으로 구성하기
-
- 유연하게
- 이 것만으로 모든 레이아웃을 작성 가능하게하기
-
- 빠르게
- 프레임워크에서 자체 성능 최적화 수행
- 세가지 메인 구성요소
- LayoutItem
- 화면에 렌더링되는 단일 뷰
- 컬렉션 뷰에서 개별 컨텐츠의 크기, 공간, 정렬 방법에 대한 청사진 역할
- LayoutGroup
- item들이 서로 관련하여 배치되는 방식을 결정해서 결합하는 역할
- 항목을 가로행, 세로열 또는 사용자 지정 배열로 배치 가능
- LayoutSection
- 그룹으로 이루어짐
- 컬렉션뷰 레이아웃에는 하나 이상의 Section
- 레이아웃을 각각의 영역으로 분리하는 방법을 제공
- 각 세션은 컬렉션 뷰의 다른 섹션과 레이아웃이 같거나 다를수 있음(속성에 의해 결정)
- Layout
- 모든 구성요소들을 반영
- Size
- Absolute
- 절대적인 값
- Estimate
- 추정 값, 예상 값
- 런타임에 컨텐츠 크기가 변형될 수 있는 경우(데이터 로드, 시스템 글꼴 크기 변형)
- 초기 추정 크기를 제공하면 시스템이 나중에 실제 값을 계산해서 반영
- Fractional
- 분수 값을 사용해서 item 컨테이너를 기준으로 값을 정의
- Absolute
- LayoutItem
- SnapKit
- 코드 베이스로 UI를 구현하고 Auto Layout을 고려해야할 때 직관적이고 간편하게
작성할 수 있도록 도와주는 오픈소스프레임워크(No Storyboard)
- 코드 베이스로 UI를 구현하고 Auto Layout을 고려해야할 때 직관적이고 간편하게
- Swift Package Manager
- SnapKit 같은 외부라이브러리를 활용하기 위해 사용(Like CocoaPods)
- 패키지를 사용하고자 하는 프로젝트에 SnapKit에 대한 Dependency 주소를 넣어줌