[swift] Swift Koloda를 사용하여 카드 스택 구현하기

Swift Koloda는 스와이프 동작을 이용하여 카드 스택을 구현하는 iOS 라이브러리입니다. 이 라이브러리를 사용하면 카드를 스와이프하여 다음 카드로 이동하거나 버릴 수 있는 인터랙티브한 사용자 인터페이스를 간단히 구현할 수 있습니다.

1. Swift Koloda 라이브러리 설치하기

CocoaPods를 사용하여 Swift Koloda 라이브러리를 설치할 수 있습니다. 프로젝트의 Podfile에 다음과 같이 추가합니다.

pod 'Koloda'

터미널에서 pod install 명령을 실행하여 라이브러리를 설치합니다.

2. 프로젝트에 KolodaView 추가하기

카드 스택을 표시할 뷰 컨트롤러에 KolodaView를 추가해야 합니다. KolodaView는 DataSource와 Delegate를 구현하여 카드 데이터를 관리하고 사용자의 액션을 처리합니다.

import UIKit
import Koloda

class CardStackViewController: UIViewController {
    @IBOutlet weak var kolodaView: KolodaView!
    
    var cards: [String] = []
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        kolodaView.dataSource = self
        kolodaView.delegate = self
        
        // 카드 데이터 초기화
        cards = ["Card1", "Card2", "Card3", "Card4", "Card5"]
        
        // 새로운 카드 스택 로드
        kolodaView.reloadData()
    }
}

extension CardStackViewController: KolodaViewDataSource {
    func kolodaNumberOfCards(_ koloda: KolodaView) -> Int {
        return cards.count
    }
    
    func kolodaView(_ koloda: KolodaView, viewForCardAt index: Int) -> UIView {
        let cardView = UIView(frame: CGRect(x: 0, y: 0, width: kolodaView.frame.width, height: kolodaView.frame.height))
        cardView.backgroundColor = .white
        
        let label = UILabel(frame: CGRect(x: 0, y: 0, width: cardView.frame.width, height: 30))
        label.textAlignment = .center
        label.text = cards[index]
        
        cardView.addSubview(label)
        
        return cardView
    }
}

extension CardStackViewController: KolodaViewDelegate {
    func kolodaDidRunOutOfCards(_ koloda: KolodaView) {
        // 카드가 모두 소진되었을 때 처리할 로직 구현
    }
}

위의 코드에서 cards 배열에는 카드에 표시할 데이터가 포함되어 있습니다. viewDidLoad()에서는 cards 배열을 초기화하고 새로운 카드 스택을 로드하도록 kolodaView.reloadData()를 호출합니다.

CardStackViewController 클래스에서는 KolodaViewDataSourceKolodaViewDelegate를 구현합니다. KolodaViewDataSource에서는 kolodaNumberOfCards(_:) 메서드를 구현하여 카드의 개수를 반환하고, kolodaView(_:viewForCardAt:) 메서드를 구현하여 각 카드의 뷰를 반환합니다. KolodaViewDelegate에서는 사용자가 카드를 모두 스와이프했을 때 실행할 로직을 구현할 수 있습니다.

3. 카드 스택 기능 추가하기

위의 코드에서는 카드 스택을 표시하는 뷰를 구현했지만, 사용자의 스와이프 동작을 처리하여 카드를 다음으로 이동하거나 버릴 수 있도록 추가 구현해야 합니다.

extension CardStackViewController: KolodaViewDelegate {
    // ...

    func koloda(_ koloda: KolodaView, didSwipeCardAt index: Int, in direction: SwipeResultDirection) {
        switch direction {
        case .left:
            // 카드를 왼쪽으로 스와이프했을 때 처리할 로직 구현
            break
        case .right:
            // 카드를 오른쪽으로 스와이프했을 때 처리할 로직 구현
            break
        default:
            break
        }
        
        // 다음 카드로 이동
        kolodaView.swipe(.right)
    }
}

위의 코드에서는 KolodaViewDelegatekoloda(_:didSwipeCardAt:in:) 메서드를 구현하여 사용자가 카드를 스와이프할 때 처리할 로직을 추가합니다. 스와이프 방향에 따라 다른 동작을 수행할 수 있습니다.

마지막으로, kolodaView.swipe(.right)를 호출하여 다음 카드로 이동할 수 있습니다.

결론

Swift Koloda를 이용하면 간단한 코드로 카드 스택을 구현할 수 있습니다. 사용자가 카드를 스와이프하여 다음 카드로 이동하거나 버릴 수 있는 인터랙티브한 사용자 인터페이스를 손쉽게 구현할 수 있습니다.