[swift] Swift IGListKit에서 컬렉션 뷰 셀 확장/축소 처리하기

IGListKit은 iOS 앱에서 컬렉션 뷰를 구현하는 데 사용되는 강력한 프레임워크입니다. 이 프레임워크를 사용하면 컬렉션 뷰의 셀을 확장 및 축소하는 기능을 쉽게 구현할 수 있습니다.

IGListKit 소개

IGListKit은 Instagram에서 개발된 iOS UI 프레임워크입니다. IGListKit은 기본 UICollectionView와 달리 성능이 우수하며, 데이터 소스 및 변경 사항을 관리하기 위해 diffing 알고리즘을 사용합니다.

컬렉션 뷰 셀 확장/축소 구현하기

IGListKit에서 컬렉션 뷰 셀을 확장/축소하기 위해 다음 단계를 따를 수 있습니다:

1. 셀 모델 생성

첫 번째로, 셀을 위한 모델을 만듭니다. 셀 모델은 셀의 상태를 나타내는 프로퍼티를 포함해야 합니다. 확장 또는 축소 상태를 나타내는 불리언 프로퍼티를 추가하는 것이 일반적입니다.

struct CellModel {
    let title: String
    var isExpanded: Bool
}

2. Section 모델 생성

다음으로, 섹션 모델을 만듭니다. 섹션 모델은 IGListSectionController에서 사용되는 모델입니다. IGListSectionController는 각각의 섹션을 관리하고 컬렉션 뷰 셀을 표시합니다.

class SectionModel {
    var cellModels: [CellModel]

    init(cellModels: [CellModel]) {
        self.cellModels = cellModels
    }
}

3. Section 컨트롤러 생성

새로운 섹션을 처리하기 위해 IGListSectionController의 서브 클래스를 만듭니다. 이 섹션 컨트롤러에서는 컬렉션 뷰 셀을 생성하고, 데이터를 관리하며, 화면에 표시하는 데 필요한 작업을 수행합니다.

class MySectionController: ListSectionController {
    private var model: SectionModel?

    override func didUpdate(to object: Any) {
        model = object as? SectionModel
    }

    override func numberOfItems() -> Int {
        return model?.cellModels.count ?? 0
    }

    override func cellForItem(at index: Int) -> UICollectionViewCell {
        // 셀을 생성하고 데이터를 바인딩하는 로직 구현
    }

    override func sizeForItem(at index: Int) -> CGSize {
        if let model = model, model.cellModels[index].isExpanded {
            // 확장된 셀 크기
        } else {
            // 축소된 셀 크기
        }
    }
}

4. 컨트롤러 등록 및 업데이트

마지막으로, 섹션 컨트롤러를 컬렉션 뷰에 등록하고 업데이트합니다.

let adapter = ListAdapter(updater: ListAdapterUpdater(), viewController: self)
adapter.collectionView = collectionView
adapter.dataSource = self

extension ViewController: ListAdapterDataSource {
    func objects(for listAdapter: ListAdapter) -> [ListDiffable] {
        return [SectionModel(cellModels: [CellModel(title: "Item 1", isExpanded: false),
                                          CellModel(title: "Item 2", isExpanded: true),
                                          CellModel(title: "Item 3", isExpanded: false)])]
    }

    func listAdapter(_ listAdapter: ListAdapter, sectionControllerFor object: Any) -> ListSectionController {
        return MySectionController()
    }

    func emptyView(for listAdapter: ListAdapter) -> UIView? {
        return nil
    }
}

결론

IGListKit은 컬렉션 뷰를 사용하는 앱에서 셀의 확장/축소와 같은 복잡한 동작을 쉽게 처리할 수 있는 강력한 프레임워크입니다. 위의 단계를 따라 진행하면 IGListKit을 사용하여 컬렉션 뷰의 셀을 확장/축소할 수 있습니다.

참고 자료