Core Layout Process

Collection View는 레이아웃 객체와 직접적으로 작동하며 전체 레이아웃 프로세스를 관리한다.

레이아웃 프로세스에 사용되는 핵심 메서드는 다음과 같은 중요한 작업을 처리한다.

  • 스크롤 가능한 내용 영역의 크기 지정
  • 셀 및 뷰를 배치할 수 있도록 레이아웃을 구성하는 대한 attribute 객체를 제공

레이아웃 프로세스는 다음의 순서대로 수행된다.

 

  1. prepareLayout: 배치 정보에 필요한 초기 계산을 수행
  2. collectionViewContentSize: 초기 계산에 따라 전체 콘텐츠 영역의 크기를 반환
  3. layoutAttributesForElementsInRect: 지정된 사각형에 있는 셀 및 뷰의 속성을 반환
  4. invalidateLayout: 레이아웃을 무효화한다.

 

 

레이아웃 준비

레이아웃 주기가 시작될 때 레이아웃 객체는 레이아웃 프로세스를 시작하기 전에 prepareLayout 메서드를 호출한다. 이 메서드는 나중에 알려줄 레이아웃 정보를 계산한다. 각 item에 대한 attributes를 정의한다. 이 과정이 완료된 후에 레이아웃 프로세스의 다음 단계인 콘텐츠 크기를 계산할 수 있는 충분한 정보로 사용된다.

 

콘텐츠 영역 크기 반환

컨텐츠 크기를 사용하여 스크롤 뷰를 적절하게 구성한다. 예를 들어, 계산된 콘텐츠 크기가 현재 장치 화면의 한도를 지나 수직 및 수평으로 확장되면 스크롤 뷰가 조정되어 양방향으로 동시에 스크롤할 수 있다. 

 

주어진 직사각형에서 항목에 대한 레이아웃 속성 제공

레이아웃 프로세스의 마지막 단계에서 CollectionView는 레이아웃 객체의 layoutAttributesForElementsInRect: 메서드를 호출한다. 이 메서드는 스크롤 위치를 기준으로 특정 사각형과 교차된 셀과 뷰의 속성을 묻는다. 이 정보를 반환한 후에, 코어 레이아웃 프로세스는 완료된다.

 

레이아웃 무효화

레이아웃이 완료된 후 사용자 또는 CollectionView가 레이아웃을 무효화할 때 까지 셀과 뷰의 속성은 동일하게 유지된다. 레이아웃 객체의 invalidLayout 메서드를 호출하면 prepareLayout 메서드를 새로 호출한다. 레이아웃 업데이트 프로세스에서 이 메서드가 호출된다.

 

 

참고 자료

developer.apple.com/library/archive/documentation/WindowsViews/Conceptual/CollectionViewPGforIOS/CreatingCustomLayouts/CreatingCustomLayouts.html#//apple_ref/doc/uid/TP40012334-CH5-SW2

 

댓글