CollectionViewLayout prepare()

이원희·2021년 2월 16일
0

📱 iOS

목록 보기
20/24
post-thumbnail

오늘은 UICollectionViewLayoutprepare()에 대해서 알아보자.

UICollectionViewLayout

공식문서에 따르면 UICollectionViewLayoutCollectionView의 레이아웃 정보를 생성하기 위한 추상 class라고 한다.
cellsupplementary view 그리고 decoration view들의 배치를 결정하고 이를 CollectionView에 알려준다.
CollectionView는 UICollectionViewLayout이 알려준 정보를 view에 적용하여 화면에 표시될 수 있도록 한다.

즉, UICollectionViewLayout은 CollectionView에 표시될 레이아웃의 정보를 갖고 있다.


prepare()

prepare()는 UICollectinViewLayout의 Instance Method이다.
공식문서

이 메서드는 레이아웃 object에게 현재 레이아웃을 업데이트하도록 시킨다.
레이아웃 업데이트는 CollectionView가 해당 콘텐츠를 처음으로 표시할 때와 view가 변경되어 레이아웃이 무효화될때 발생한다.
레이아웃을 업데이트 할 때마다 CollectionView는 prepare()를 호출해 레이아웃 object에 이후 레이아웃 작업을 준비하도록 한다.

이 메서드의 기본 구현은 아무 작업도 수행하지 않고, subClass에서 재정의한다.
재정의 과정에서 데이터 구조를 설정하거나 레이아웃을 수행하는데 필요한 초기 계산을 수행할 수 있다.

즉, 정리하자면

  • 레이아웃 연산이 발생할때 마다 호출된다.
  • CollectionView의 사이즈, item의 위치등을 결정하기 위한 초기 계산 등을 수행할 수 있다.

참고사항

UICollectionView를 이용한 LINE iOS 대화방 리팩토링 <- 이 포스팅에서 prepare()를 어떻게 사용하는지 조금 엿볼 수 있다.
기존에 UITableView로 구성되어 있던 라인 대화방을 UICollectionView로 변경하는 과정을 담은 포스팅이다.

UICollectionViewLayout의 prepare() 함수에서는 UICollectionView에 표시되는 전체 크기를 계산하고 각 셀의 레이아웃 속성을 미리 계산하여 메모리에 적재한 뒤 유지합니다.
레이아웃의 데이터 구조를 설계할 때는, UICollectionView에서 특정 화면 영역이나 특정 IndexPath에 대한 레이아웃 속성을 요청할 때 빠르게 응답할 수 있도록 설계하는 것이 중요합니다.
내부적으로 Dictionary나 Array 등을 활용하여 최대한 빠르게 응답할 수 있도록 설계했습니다.

포스팅을 읽다보면 위의 글을 찾을 수 있는데 그 이후로 쭉 읽다보면 prepare()를 이용해 다양한 콘텐츠/기능에 대응하기 위해 cell/item의 콘텐츠 크기를 미리 계산해 빠른 레이아웃 작업을 하고 잇다.


마무리

오늘은 UICollectionViewLayout의 prepare()에 대해서 알아봤다.
그럼 이만👋

0개의 댓글