[swift] Swift IGListKit에서 컬렉션 뷰 셀 페이지네이션 구현하기

이번 블로그 포스트에서는 Swift 언어로 IGListKit을 사용하여 컬렉션 뷰 셀 페이지네이션을 구현하는 방법에 대해 알아보겠습니다.

IGListKit은 Instagram에서 개발한 iOS 애플리케이션의 성능을 향상시키기 위해 만들어진 라이브러리로, 많은 데이터를 표시하는 뷰 컨트롤러와 컬렉션 뷰를 좀 더 쉽게 관리할 수 있도록 도와줍니다.

IGListKit 설치하기

먼저 IGListKit을 프로젝트에 설치해야 합니다. IGListKit은 CocoaPods을 통해 설치할 수 있으므로, Podfile에 다음과 같이 추가합니다.

pod 'IGListKit'

그리고 터미널에서 다음 명령어를 실행하여 CocoaPods를 업데이트합니다.

$ pod install

이제 IGListKit을 사용할 준비가 되었습니다.

IGListKit 컬렉션 뷰 설정하기

IGListKit은 기본적으로 컬렉션 뷰를 사용하여 데이터를 표시합니다. 먼저 IGListKit의 컬렉션 뷰를 설정하는 방법에 대해 알아보겠습니다.

import IGListKit

class MyViewController: UIViewController, ListAdapterDataSource {
    
    @IBOutlet weak var collectionView: UICollectionView!
    
    lazy var adapter: ListAdapter = {
        return ListAdapter(updater: ListAdapterUpdater(), viewController: self)
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        adapter.collectionView = collectionView
        adapter.dataSource = self
    }
    
    // ...
}

collectionView 변수는 뷰 컨트롤러에 있는 컬렉션 뷰를 참조하도록 설정합니다. adapter 변수는 IGListKit의 ListAdapter를 생성하여 컬렉션 뷰와 뷰 컨트롤러를 연결합니다. adapter.dataSource에는 ListAdapterDataSource 프로토콜을 구현한 객체를 할당하여 데이터를 제공합니다.

페이지네이션 구현하기

이제 IGListKit을 사용하여 컬렉션 뷰의 페이지네이션을 구현해보겠습니다. 페이지네이션은 스크롤이 하단에 도달할 때마다 새로운 데이터를 불러오는 것을 의미합니다.

먼저, 페이지를 나타내는 변수를 선언합니다.

var currentPage: Int = 0

그리고 ListAdapterDataSource 프로토콜의 objects(for:) 메서드를 구현하여 페이지별로 다른 데이터를 반환하도록 합니다.

extension MyViewController: ListAdapterDataSource {
    
    func objects(for listAdapter: ListAdapter) -> [ListDiffable] {
        var objects: [ListDiffable] = []
        
        // 현재 페이지에 해당하는 데이터를 objects 배열에 추가
        
        return objects
    }
    
    // ...
}

현재 페이지에 해당하는 데이터를 가져오는 로직은 각각의 애플리케이션에 따라 다르게 구현될 수 있습니다. 이 예제에서는 페이징 API를 호출하여 페이지별로 데이터를 가져오는 방법을 사용하도록 가정하겠습니다.

다음으로, 스크롤 이벤트를 감지하여 페이지네이션을 처리하는 로직을 추가합니다.

extension MyViewController: UIScrollViewDelegate {

    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        let offsetY = scrollView.contentOffset.y
        let contentHeight = scrollView.contentSize.height

        if offsetY > contentHeight - scrollView.frame.height {
            currentPage += 1
            adapter.performUpdates(animated: true)
        }
    }

    // ...
}

scrollViewDidScroll 메서드는 스크롤 뷰가 스크롤될 때 호출되는 메서드입니다. 현재 위치가 컨텐츠 뷰의 맨 아래에 도달한 경우, currentPage를 증가시키고 데이터를 업데이트하는 adapter.performUpdates(animated: true) 메서드를 호출하여 페이지네이션을 처리합니다.

이렇게 IGListKit을 사용하여 Swift 언어에서 컬렉션 뷰의 페이지네이션을 구현하는 방법에 대해 알아보았습니다. IGListKit은 데이터 표시 및 업데이트 관리에 매우 유용한 도구이므로, 프로젝트에서 활용해보시기 바랍니다.