CollectionView 란 Grid, Stack, Tile, 그리고 원형 배열을 포함하여 다양한 유연성을 제공하는 Interface.
Cell :
Supplementary views :
Decoration views :
Layout Object :
CollectionView 내의 아이템 배치 및 시각적 스타일을 결정한다
크기, 위치, 및 해당 뷰의 레이아웃과 과련된 특성들을 결정
→ UICollectionViewDataSource 는 뷰와 표시할 콘텐츠를 제공
우선, CollectionView 를 사용하여 화면에 콘텐츠를 표시하기 위해서 CollectionView 는 여러가지 다른 객체들과 협력 함.
표시할 콘텐츠의 정보는 UICollectionViewDataSource 로부터 받아옴
사용자와의 Interaction 을 처리하기 위해서는 UICollectionViewDelegate 사용
최상위 포함 및 관리 (Top level containment)
UICollectionView
/ UICollectionViewController
: UICollectionView
는 컬렉션뷰의 콘텐츠가 보이는 영역을 정의합니다. UICollectionViewController
는 컬렉션뷰를 관리하는 뷰 컨트롤러입니다. UICollectionViewController
는 선택적으로 사용 가능합니다.콘텐츠 관리
UICollectionViewDataSource protocol
/ UICollectionViewDelegate protocol
: 데이터 소스 객체는 컬렉션뷰와 관련된 중요한 객체이며, 필수적으로 제공해야 합니다. 데이터 소스는 컬렉션뷰의 콘텐츠를 관리하고 해당 콘텐츠를 표시하기 위한 뷰를 제공합니다. 컬렉션뷰 델리게이트 객체는 사용자와의 상호작용과 셀 강조 표시 및 선택 등을 관리합니다.표시(Presentation)
UICollectionReusableView
/ UICollectionViewCell
: 컬렉션에 표시된 모든 뷰는 UICollectionReusableView
클래스의 인스턴스여야 합니다. 이 클래스는 컬렉션뷰에서 사용 중인 뷰 재사용 메커니즘을 지원합니다. 새로운 뷰를 만드는 대신, 뷰를 재사용하여 성능을 향상시킵니다.레이아웃(Layout)
UICollectionViewLayout
/ UICollectionViewLayoutAttribute
/ UICollectionViewUpdateItem
: UICollectionViewLayout
의 서브클래스는 레이아웃 객체라고 하며 컬렉션 뷰 내부의 셀 및 재사용 가능한 뷰의 위치, 크기 및 시각적 속성을 정의합니다. UICollectionViewLayoutAttributes
는 레이아웃 프로세스 중에 컬렉션뷰에 셀과 재사용가능한 뷰를 표시하는 위치와 방법을 알려줍니다. 레이아웃 객체 아이템이 삽입, 삭제, 혹은 컬렉션뷰 내에서 이동할 때마다 레이아웃 객체는 UICollectionViewUpdateItem
클래스의 인스턴스를 받습니다.플로우 레이아웃(Flowlayout)
UICollectionViewFlowLayout
/ UICollectionViewDelegatFlowLayout protocol
: 그리드 혹은 다른 라인기반(lined-based) 레이아웃을 구현하는 데 사용됩니다. 클래스를 그대로 사용하거나 동적으로 커스터마이징할 수 있는 플로우 델리게이트 객체와 함께 사용할 수 있습니다.컬렉션뷰와 관련된 클래스 및 프로토콜
CollectionView 에서 데이터를 화면에 표시하기 위해 사용된다. UITableView 에 UITableViewCell 이 있듯이 Cell 이 실질적으로 데이터를 표시하는 객체임.
하나의 Cell 은 하나의 데이터 아이템을 화면에 표시한다
CollectionView Cell 은 배경을 표시하는 뷰 2개와 콘텐츠를 표시하는 뷰 1개로 구성되어 있다.
→ 2개의 배경뷰는 Cell 이 선택되었을 때 시각적인 표현을 제공하기 위해 사용된다
Cell 의 레이아웃은 CollectionView 의 레이아웃 객체 에 의해 관리된다.
CollectionView Cell 은 뷰의 재사용 메커니즘 지원
일반적으로 CollectionViewCell 클래스의 인스턴스는 직접 생성 X
→ 대신 특정 Cell 의 하위클래스를 CollectionView 객체에 등록한 후, 컬렉션뷰 셀 클래스의 새로운 인스턴스가 필요할 때, 컬렉션의 dequeueReusableCell(withReuseIdentifier:for:) 메서드를 호출한다.
→ Note : Storyboard 를 사용하여 셀을 구성하면 CollectionView 에 따로 셀 클래스 등록 필요 X
var contentView: UIView
: 셀의 콘텐츠를 표시하는 뷰입니다.var backgroundView: UIView?
: 셀의 배경을 나타내는 뷰입니다. 이 프로퍼티는 셀이 처음 로드되었을 경우와 셀이 강조 표시되지 않거나 선택되지 않을 때 항상 기본 배경의 역할을 합니다.var selectedBackgroundView: UIView?
: 셀이 선택되었을 때 배경뷰 위에 표시되는 뷰입니다. 이 프로퍼티는 셀이 강조 표시되거나 선택될 때마다 기본 배경 뷰인 backgroundView
를 대체하여 표시됩니다.var isSelected: Bool
: 셀이 선택되었는지를 나타냅니다. 셀이 선택되어있지 않다면 이 프로퍼티의 값은 false입니다.var isHighlighted: Bool
: 셀의 하이라이트 상태를 나타냅니다. 하이라이트 되어있지 않다면 기본 값은 false입니다.func dragStateDidChange(_:)
: 셀의 드래그 상태가 변경되면 호출됩니다.
UICollectionViewCellDragState
의 열거형으로 표현되고 none
, lifting
, dragging
의 3가지 상태를 갖습니다.위 내용은 "https://www.boostcourse.org/mo326/lecture/16906" 을 참고하여 공부한 내용을 개인적으로 정리하였습니다.