[swift] IGListDiffKit과 함께하는 로딩 스피너 처리

IGListDiffKit은 Swift에서 사용할 수 있는 강력한 리스트 업데이트 도구입니다. IGListDiffKit을 사용하면 코딩해야 할 업데이트 로직을 간편하게 처리할 수 있으며, 리스트 뷰에서 발생하는 업데이트를 효율적으로 처리할 수 있습니다.

이번 글에서는 IGListDiffKit과 함께 로딩 스피너 처리를 어떻게 할 수 있는지 알아보겠습니다.

스피너 뷰 추가하기

먼저, 로딩 중에 표시할 스피너 뷰를 추가해야 합니다. 이 스피너 뷰는 IGListKit의 UICollectionView에 추가되어야 합니다. 따라서, 다음과 같이 collectionView에 스피너 뷰를 추가하는 코드를 작성합니다.

let spinnerView = UIActivityIndicatorView(style: .medium)
collectionView.addSubview(spinnerView)
spinnerView.translatesAutoresizingMaskIntoConstraints = false
spinnerView.centerXAnchor.constraint(equalTo: collectionView.centerXAnchor).isActive = true
spinnerView.centerYAnchor.constraint(equalTo: collectionView.centerYAnchor).isActive = true

위 코드에서는 UIActivityIndicatorView를 생성하여 collectionView에 추가한 후, Auto Layout을 사용하여 가로와 세로 중앙에 위치하도록 설정합니다.

업데이트 시작 시 스피너 애니메이션 시작하기

업데이트가 시작되면 스피너 애니메이션을 시작하도록 설정해야 합니다. IGListKit은 업데이트가 시작될 때, IGListAdapterUpdaterDelegate 프로토콜의 listAdapterUpdater(_:willPerformUpdates:for:) 메서드를 호출합니다. 이 메서드를 이용하여 스피너 애니메이션을 시작할 수 있습니다. 다음과 같이 코드를 작성합니다.

extension YourListAdapter: IGListAdapterUpdaterDelegate {
    func listAdapterUpdater(_ listAdapterUpdater: IGListAdapterUpdater, willPerformUpdates updates: [IGListUpdateOperation], for collectionView: UICollectionView) {
        // 업데이트 시작 시 스피너 애니메이션 시작
        spinnerView.startAnimating()
        spinnerView.isHidden = false
    }
}

위 코드에서는 IGListAdapterUpdaterDelegate 프로토콜을 구현하여 willPerformUpdates 메서드를 추가합니다. 이 메서드에서는 스피너 애니메이션을 시작하고, spinnerView를 보이도록 설정합니다.

업데이트 완료 시 스피너 애니메이션 종료하기

업데이트가 완료되면 스피너 애니메이션을 종료해야 합니다. IGListKit은 업데이트가 완료될 때, IGListAdapterUpdaterDelegate 프로토콜의 listAdapterUpdater(_:didPerformUpdates:for:) 메서드를 호출합니다. 이 메서드를 이용하여 스피너 애니메이션을 종료할 수 있습니다. 다음과 같이 코드를 작성합니다.

extension YourListAdapter: IGListAdapterUpdaterDelegate {
    func listAdapterUpdater(_ listAdapterUpdater: IGListAdapterUpdater, didPerformUpdates updates: [IGListUpdateOperation], for collectionView: UICollectionView) {
        // 업데이트 완료 시 스피너 애니메이션 종료
        spinnerView.stopAnimating()
        spinnerView.isHidden = true
    }
}

위 코드에서는 IGListAdapterUpdaterDelegate 프로토콜을 구현하여 didPerformUpdates 메서드를 추가합니다. 이 메서드에서는 스피너 애니메이션을 종료하고, spinnerView를 숨김 처리합니다.

결론

이렇게 하면 IGListDiffKit과 함께 로딩 스피너를 처리할 수 있습니다. IGListDiffKit을 사용하면 리스트 업데이트와 관련된 복잡한 작업을 단순화할 수 있으므로, 많은 개발자들에게 유용하게 사용될 수 있습니다.

참고 자료: