[swift] IGListKit에서 캐싱과 애니메이션 관리하는 방법

IGListKit은 UICollectionView를 사용하여 데이터를 표시하는 데 도움이 되는 크고 강력한 프레임워크입니다. 하지만 IGListKit은 캐싱과 애니메이션 관리에 대한 추가적인 작업이 필요합니다.

캐싱 관리

IGListKit은 내부적으로 캐싱 메커니즘을 제공하지 않습니다. 따라서 개발자가 직접 캐싱 로직을 구현해야 합니다. IGListKit에서 캐싱을 구성하는 방법은 다음과 같습니다.

1. 커스텀 캐싱 인스턴스 만들기

IGListWorkingRangeDelegate 프로토콜을 준수하는 커스텀 캐싱 인스턴스를 만듭니다. 이 인스턴스는 캐싱하고자 하는 뷰 모델을 저장하고 관리합니다.

class CustomCachingInstance: NSObject, IGListWorkingRangeDelegate {
    var cachedViewModels: [ViewModel] = []

    func listAdapter(_ listAdapter: IGListAdapter, sectionControllerWillEnterWorkingRange sectionController: IGListSectionController) {
        // 뷰 모델을 캐시에 추가합니다.
    }

    func listAdapter(_ listAdapter: IGListAdapter, sectionControllerWillExitWorkingRange sectionController: IGListSectionController) {
        // 캐시에서 뷰 모델을 제거합니다.
    }
}

2. 캐싱 인스턴스 적용

캐싱하려는 뷰 컨트롤러에서 IGListAdapterworkingRangeDelegate 프로퍼티에 커스텀 캐싱 인스턴스를 할당합니다.

let cacheInstance = CustomCachingInstance()
listAdapter.workingRangeDelegate = cacheInstance

3. 캐싱 로직 구현

IGListWorkingRangeDelegate 프로토콜의 메서드를 활용하여 캐싱 로직을 구현합니다. sectionControllerWillEnterWorkingRange 메서드에서 뷰 모델을 캐시에 추가하고, sectionControllerWillExitWorkingRange 메서드에서 캐시에서 뷰 모델을 제거합니다.

애니메이션 관리

IGListKit은 아이템을 업데이트할 때 애니메이션을 제공합니다. 하지만 애니메이션의 세부 설정은 개발자가 직접 제어해야 합니다.

1. 애니메이션 유형 선택

IGListSectionController의 didUpdate(to: Any) 메서드를 오버라이드하여 새로운 데이터가 업데이트될 때 애니메이션 유형을 선택할 수 있습니다. IGListKit은 기본적으로 .fade 애니메이션을 제공합니다. 따라서 다른 애니메이션 유형을 원한다면 직접 구현해야 합니다.

override func didUpdate(to object: Any) {
    super.didUpdate(to: object)
    if let viewModel = object as? ViewModel {
        // 새로운 데이터가 업데이트될 때 애니메이션 유형 선택
        collectionView.performBatchUpdates(nil, completion: nil) 
    }
}

2. 애니메이션 유형 구현

UICollectionView의 performBatchUpdates(_:completion:) 메서드를 사용하여 애니메이션 유형을 구현합니다. 애니메이션 유형에 따라 데이터를 추가, 삭제, 이동, 업데이트할 수 있습니다.

collectionView.performBatchUpdates({
    // 애니메이션 유형에 맞게 데이터 조작하기
}, completion: nil)

결론

IGListKit은 캐싱과 애니메이션 관리를 위한 별도의 기능을 제공하지 않지만, 개발자가 커스텀 캐싱 인스턴스를 구현하고 애니메이션 유형을 선택 및 구현함으로써 캐싱과 애니메이션을 효과적으로 관리할 수 있습니다.

참고 문서: IGListKit 공식 문서 (영문)