Core Layout Process
- iOS
- 2020. 11. 8.
Collection View는 레이아웃 객체와 직접적으로 작동하며 전체 레이아웃 프로세스를 관리한다.
레이아웃 프로세스에 사용되는 핵심 메서드는 다음과 같은 중요한 작업을 처리한다.
- 스크롤 가능한 내용 영역의 크기 지정
- 셀 및 뷰를 배치할 수 있도록 레이아웃을 구성하는 대한 attribute 객체를 제공
레이아웃 프로세스는 다음의 순서대로 수행된다.
- prepareLayout: 배치 정보에 필요한 초기 계산을 수행
- collectionViewContentSize: 초기 계산에 따라 전체 콘텐츠 영역의 크기를 반환
- layoutAttributesForElementsInRect: 지정된 사각형에 있는 셀 및 뷰의 속성을 반환
- invalidateLayout: 레이아웃을 무효화한다.
레이아웃 준비
레이아웃 주기가 시작될 때 레이아웃 객체는 레이아웃 프로세스를 시작하기 전에 prepareLayout 메서드를 호출한다. 이 메서드는 나중에 알려줄 레이아웃 정보를 계산한다. 각 item에 대한 attributes를 정의한다. 이 과정이 완료된 후에 레이아웃 프로세스의 다음 단계인 콘텐츠 크기를 계산할 수 있는 충분한 정보로 사용된다.
콘텐츠 영역 크기 반환
컨텐츠 크기를 사용하여 스크롤 뷰를 적절하게 구성한다. 예를 들어, 계산된 콘텐츠 크기가 현재 장치 화면의 한도를 지나 수직 및 수평으로 확장되면 스크롤 뷰가 조정되어 양방향으로 동시에 스크롤할 수 있다.
주어진 직사각형에서 항목에 대한 레이아웃 속성 제공
레이아웃 프로세스의 마지막 단계에서 CollectionView는 레이아웃 객체의 layoutAttributesForElementsInRect: 메서드를 호출한다. 이 메서드는 스크롤 위치를 기준으로 특정 사각형과 교차된 셀과 뷰의 속성을 묻는다. 이 정보를 반환한 후에, 코어 레이아웃 프로세스는 완료된다.
레이아웃 무효화
레이아웃이 완료된 후 사용자 또는 CollectionView가 레이아웃을 무효화할 때 까지 셀과 뷰의 속성은 동일하게 유지된다. 레이아웃 객체의 invalidLayout 메서드를 호출하면 prepareLayout 메서드를 새로 호출한다. 레이아웃 업데이트 프로세스에서 이 메서드가 호출된다.
참고 자료
'iOS' 카테고리의 다른 글
[UIKit] Scrollable StackView 만들기 (0) | 2021.03.26 |
---|---|
Autoresizing과 AutoresizingMask (0) | 2021.03.25 |
Playground에서 뷰 프로토타이핑하기 (0) | 2021.03.18 |
Dynamic Type을 사용하여 폰트 크기 조정하기 (0) | 2021.03.16 |
올바르게 오류 처리하기 (2) | 2020.11.13 |