[iOS/Swift] UICollectionView

민니·2022년 6월 27일
0

iOS

목록 보기
5/22

UICollectionView?

  • 데이터 항목들의 정렬된 컬렉션을 관리하고, 커스텀한 레이아웃을 이용해 표시하는 객체
  • 슬라이드, 리스트 등 다양한 형태로 표현 가능
  • UIScrollView를 상속받음

구성 요소


  • Cell: 컬렉션 뷰의 컨텐츠를 표시
  • Supplementary View: 섹션에 대한 정보를 표시
  • Decoration View: 컬렉션 뷰에 대한 배경을 꾸밀 때 사용

컬렉션 뷰 구현을 위한 클래스 및 프로토콜

  • Top Level Containment
    UICollectionView: 컬렉션 뷰의 컨텐츠가 보이는 영역을 정의
    UICollectionViewController: 컬렉션 뷰를 관리하는 뷰 컨트롤러
  • 컨텐츠 관리
    UICollectionViewDataSource protocol: 컬렉션 뷰의 컨텐츠를 관리하고, 해당 컨텐츠를 표시하기 위한 뷰를 제공
    UICollectionViewDelegate protocol: 사용자와의 상호작용과 셀 강조 표시 및 선택을 관리
  • Presentation
    UICollectionReusableView: 뷰 재사용 매커니즘을 지원
    UICollectionViewCell: UICollectionView 인스턴스에 제공되는 데이터를 화면에 표시하는 역할
  • Layout
    UICollectionViewLayout의 서브클래스는 레이아웃 객체라고 하며, 컬렉션 뷰 내부의 셀 및 재사용 가능한 뷰의 위치, 크기, 시각적 속성 정의
    UICollectionViewLayoutAttribute: 컬렉션 뷰에 셀과 재사용 가능한 뷰를 표시하는 위치와 방법 알려줌.
    UICollectionViewUpdateItem: 레이아웃 객체 아이템이 삽입, 삭제, 혹은 컬렉션 뷰 내에서 이동할 때마다 UICollectionViewUpdateItem 클래스의 인스턴스를 받음.
  • FlowLayout
    UICollectionViewFlowLayout/UICollectionViewDelegateFlowLayout protocol: 그리드 혹은 라인 기반 레이아웃을 구현하는 데 사용.

DataSource & Delegate

DataSource

  • 컬렉션 뷰와 관련하여 가장 중요한 객체
  • 데이터소스 객체를 구현하려면 UICollectionViewDataSource 프로토콜을 준수하는 객체를 만듦
  • 컬렉션 뷰의 컨텐츠를 관리하고 해당 컨텐츠를 표현하는 데 필요한 뷰를 만듦
  • collectionView(:numberOfItemsInSection:) & collectionView(:cellForItemAt:)가 필수 메서드

  • numberOfItemsInSection: 지정된 섹션에 표시할 항목의 개수
  • numberOfSection: 섹션의 개수

  • cellForItemAt: 컬렉션 뷰의 지정된 위치에 표시할 셀을 요청

  • canMoveItemAt: 지정된 위치의 항목을 컬렉션 뷰의 다른 위치로 이동할 수 있는지를 물음
  • moveItemAt: 지정된 위치의 항목을 다른 위치로 이동하도록 지시

Delegate

  • 컬렉션 뷰에서 셀의 선택 및 강조 표시를 관리하고, 해당 셀에 대한 작업을 수행
  • 메서드는 모두 선택사항

  • shouldSelectItemAt: 지정된 셀이 사용자에 의해 선택될 수 있는지 물음
  • didSelectItemAt: 지정된 셀이 선택됨을 알림
  • shouldDeselectItemAt: 지정된 셀의 선택이 해제될 수 있는지 물음
  • didDeselectItemAt: 지정된 셀의 선택이 해제되었음을 알림


UICollectionViewLayout

  • 컬렉션 뷰의 Layout 정보를 생성하는 추상적인 base class
  • 추상적이기 때문에 직접 사용할 수 없음

UICollectionViewFlowLayout

  • 그리드 혹은 라인 기반 레이아웃을 구현하는 데 사용됨
  • 컬렉션 뷰의 셀을 원하는 대로 정렬
  • UICollectionViewLayout을 상속받음

FlowLayout 수직 스크롤

FlowLayout 수평 스크롤

FlowLayout 단일 행


FlowLayout 구성 단계

  1. FlowLayout 객체를 작성하고 컬렉션 뷰에 이를 할당한다.
  2. 셀의 width, height를 정한다.
  3. 필요한 경우 셀들 간의 좌우 최소 간격, 위아래 최소 간격을 설정한다.
  4. 섹션에 header와 footer가 있다면 이것의 크기를 지정한다.
  5. Layout의 스크롤 방향을 설정한다.

셀 및 행 사이 간격 지정하기

  • 같은 행의 셀 사이의 최소 간격 지정
  • 연속하는 행 사이의 최소 간격 지정
  • 셀의 크기가 동일한 경우 셀의 간격
  • 셀의 크기가 다른 경우 셀의 간격


UICollectionViewDelegateFlowLayout

  • UICollectionViewFlowLayout 객체와 상호작용하여 레이아웃을 조정할 수 있는 메서드 정의
  • 셀의 크기와 셀간 사이 간격 정의
  • 메서드는 모두 선택사항

  • sizeForItemAt: 지정된 셀의 크기를 반환

  • insetForSectionAt: 지정된 섹션의 여백을 반환
  • minimumLineSpacingForSectionAt: 지정된 섹션의 행 사이 최소 간격을 반환
  • minimumInteritemSpacingForSectionAt: 지정된 섹션의 셀 사이의 최소 간격 반환

  • referenceSizeForHeaderInSection: 지정된 섹션의 header 뷰의 크기를 반환
  • referenceSizeForFooterInSection: 지정된 섹션의 footer 뷰의 크기를 반환



출처)
https://www.boostcourse.org/mo326/lecture/16908/?isDesc=false
https://developer.apple.com/

0개의 댓글