- content를 화면에 표시하기 위해 collectionView는 다양한 object와 협력한다.
- app에 의해 제공되는 사용자 지정 object와 (ex: app은 collectionView에 표시할 item의 개수를 알려주는 data source를 반드시 제공해야 한다.)
UIKit에서 제공하는 basic collectionView design의 일부인 object가 있다.
- tableView와 마찬가지로 collectionView는 data-oriented object이다.
- collectionView design은 데이터가 화면에 표시되는 방식과 데이터를 분리한다.
- app이 표시할 데이터는 엄격하게 관리하지만 시각적인 표시는 다양한 object에 의해 관리된다.
- collectionView의 class 중 대부분은 subclassing할 필요 없이 그대로 사용하도록 설계되어있기 때문에 적은 코드로 collectionView를 구현할 수 있다.
- And when you want to go beyond the provided behavior, you can subclass and provide that behavior.
Classes / Protocols | 설명 |
---|---|
UICollectionView, UICollectionViewController | - Purpose: Top-level containment and management - content의 시각적인 영역을 정의 - UIScrollView 상속 - layout object에서 수신하는 layout정보를 기반으로 데이터를 표시 - UICollectionViewController는 viewController 수준의 관리 지원을 제공(선택사항) |
(protocol)UICollectionViewDataSource, (protocol)UICollectionViewDelegate | - Purpose: Content management - data source object는 collectionView와 연결된 가장 중요한 object이며 반드시 제공해야 한다. - data source는 collectionView의 content를 관리하고 content를 표시하기 위한 view를 만든다. - data source를 구현하기 위해서는 UICollectionViewDataSource 프로토콜을 준수하는 object를 생성해야 한다. - delegate object를 사용하면 collectionView의 동작을 지정할 수 있다. - delegate는 선택사항이다. |
UICollectionReusableView, UICollectionViewCell | - Purpose: Presentation - collectionView에 표시되는 모든 view는 UICollectionReusableView class의 인스턴스여야 한다. - 이 classs는 recycling mechanism을 지원한다. - recycling mechanism을 통해 성능을 향상시킨다.(특히 scroll하는 상황) - ex) header, footer 등 - UICollectionViewCell object는 기본 데이터 항목에 사용되는 reusable view의 특정 유형이다. |
UICollectionViewLayout, UICollectionViewLayoutAttributes, UICollectionViewUpdateItem | - Purpose: Layout - UICollectionViewLayout의 subClass들은 layout object라고 하며 위치, 크기 등 시각적 속성을 정의하는 역할을 한다. - layout 프로세스에서 layout object는 layout attribute object를 만든다. - layout object는 데이터 항목이 변경될 때마다 UICollectionViewUpdateItem의 인스턴스를 받는다.(UICollectionViewUpdateItem의 인스턴스는 직접 만들 필요가 없다.) |
UICollectionViewFlowLayout, (protocol)UICollectionViewDelegateFlowLayout | - Purpose: Flow layout - UICollectionViewFlowLayout은 gird 또는 line 기반 layout을 구현하는 데 사용하는 object이다. - layout 정보를 동적으로 지정(customize)할 수 있다. |
- collectionView는 data source에서 표시할 cell에 대한 정보를 가져온다.
- data source 및 delegate object는 content를 관리하는 사용자 지정 object이다.
- layout object는 cell의 위치를 결정하고 해당 정보를 하나 이상의 layout attribute object 형태로 만들어 collectionView 에게 보낸다.
- 최종적으로, collectionView는 layout 정보를 실제 cell(and other views)과 병합해 presentation을 만든다.