UICollectionView.reloadData()가 완료된 시점을 알아내는 안전한 방법
2 min readAug 10, 2017
사진 라이브러리에 있는 라이브포토를 읽어들이고 중간의 어떤 사진으로 이동해서 무엇인가를 실행하는 경우를 생각해보자. 쉽고 흔한 방법은 reloadData()를 호출한 후 얼마간의 시간 지연 후 실행하는 것이다.
그런데 이 방법에는 얼마의 시간 지연이 필요할지 결정해야 하는 문제가 있다.
이 문제를 해결하기 위해서 우선 reloadData()를 호출한 후 벌어지는 일부터 알아보자.
아이템수만큼 셀 크기를 계산하고, 화면에 표시될 만큼의 셀들을 만든다. 그리고나서 콜렉션뷰와 셀들의 layoutSubviews()가 호출된다.
위 함수 호출 순서를 보면 임의의 시간 지연을 사용하는 방법은 각 함수의 소요 시간을 예측하기 어렵기 때문에 불확실하다는 것을 알 수 있다.
반면 콜렉션뷰의 layoutSubviews()는 reloadData()의 완료 시점이라고 생각할 수 있다. reloadData() 완료 후 실행할 것을 블록으로 만들고 layoutSubviews()에서 그 블록을 실행하면 임의의 시간 지연이라는 불확실성을 제거할 수 있다.
소스 코드: https://github.com/jongwonwoo/CodeSamples/tree/master/CollectionView