[swift] Swift Koloda를 사용하여 카드 접기/펼치기 기능 추가하기

카드 스와이프 라이브러리인 Swift Koloda를 사용하면 iOS 앱에 멋진 카드 뷰를 손쉽게 구현할 수 있습니다. 이번 튜토리얼에서는 Swift Koloda를 사용하여 카드를 접기/펼치기 기능을 추가하는 방법을 알아보겠습니다.

단계 1: 프로젝트 설정

먼저, 프로젝트에 Swift Koloda를 추가해야 합니다. 이를 위해 CocoaPods를 사용할 수 있습니다. Podfile에 다음과 같이 추가합니다:

pod 'Koloda'

터미널에서 pod install 명령어를 실행하여 Swift Koloda를 프로젝트에 추가합니다.

단계 2: Koloda 뷰 구성

2.1 Koloda 뷰 추가하기

Storyboard 또는 코드로 Koloda 뷰를 추가합니다. Koloda 뷰에는 dataSource, delegate 속성이 필요합니다. 뷰 컨트롤러에서 Koloda 뷰를 IBOutlet으로 연결하고 이를 설정합니다:

@IBOutlet weak var kolodaView: KolodaView!

override func viewDidLoad() {
    super.viewDidLoad()
    
    kolodaView.dataSource = self
    kolodaView.delegate = self
}

2.2 데이터 소스 구현하기

Koloda 뷰의 데이터 소스에는 카드 뷰의 개수를 반환하는 kolodaNumberOfCards(_ koloda: KolodaView) -> Int 메서드와 각 카드 뷰를 반환하는 kolodaView(_ koloda: KolodaView, viewForCardAt index: Int) -> UIView 메서드를 구현해야 합니다. 예를 들어, 3개의 카드를 가진 데이터 배열이 있다고 가정하면 다음과 같이 구현할 수 있습니다:

private let cards = ["Card 1", "Card 2", "Card 3"]

func kolodaNumberOfCards(_ koloda: KolodaView) -> Int {
    return cards.count
}

func kolodaView(_ koloda: KolodaView, viewForCardAt index: Int) -> UIView {
    let cardView = UIView()
    // 카드 뷰 초기화 및 설정
    return cardView
}

2.3 델리게이트 구현하기

Koloda 뷰의 델리게이트를 구현하여 카드의 접기/펼치기 동작을 처리합니다. kolodaDidSwipe(_ koloda: KolodaView, direction: SwipeResultDirection) 메서드에서 사용자가 카드를 스와이프할 때마다 호출되며, 스와이프 방향에 따라 해당 동작을 처리할 수 있습니다. 다음은 카드를 오른쪽으로 스와이프했을 때 접기/펼치기 동작을 처리하는 예제입니다:

func kolodaDidSwipe(_ koloda: KolodaView, direction: SwipeResultDirection) {
    if direction == .right {
        // 오른쪽으로 스와이프한 경우
        if let cardView = kolodaView.viewForCard(at: kolodaView.currentCardIndex) {
            UIView.animate(withDuration: 0.5) {
                cardView.transform = CGAffineTransform(scaleX: 0, y: 1)
            }
        }
    }
}

단계 3: 카드 액션 구현하기

카드를 접었을 때 추가적인 액션을 취하고자 한다면, 카드 뷰에 제스처를 추가하여 처리할 수 있습니다. 예를 들어, 카드 뷰를 탭할 때마다 카드를 접기/펼치기 동작을 처리하려면 다음과 같이 제스처를 추가할 수 있습니다:

@IBOutlet weak var cardView: UIView!
var isCardFolded = false

override func viewDidLoad() {
    super.viewDidLoad()
    
    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(cardTapped))
    cardView.addGestureRecognizer(tapGesture)
}

@objc private func cardTapped() {
    UIView.animate(withDuration: 0.5) {
        if self.isCardFolded {
            self.cardView.transform = .identity
        } else {
            self.cardView.transform = CGAffineTransform(scaleX: 0, y: 1)
        }
        self.isCardFolded.toggle()
    }
}

이제 카드를 탭할 때마다 카드가 접히거나 펼쳐지는 동작이 수행됩니다.

결론

이제 Swift Koloda를 사용하여 카드 접기/펼치기 기능을 추가할 수 있습니다. 이를 활용하여 앱에 독특하고 흥미로운 카드 뷰를 구현해보세요!

참고자료