[swift] Swift에서 NumberMorphView를 이용한 소셜 미디어 피드 디자인 방법 알아보기

소셜 미디어 앱에서는 사용자들의 피드에 다양한 컨텐츠가 표시됩니다. 이 중에서도 인기 있는 게시물이나 좋아요 수 등을 숫자 형태로 표현해야 할 때가 있습니다.

Swift에서는 NumberMorphView라는 라이브러리를 사용하여 이러한 효과를 구현할 수 있습니다. NumberMorphView는 사용자가 설정한 시작 숫자와 끝 숫자를 부드럽게 변화시켜주는 기능을 제공합니다.

NumberMorphView 설치하기

NumberMorphView를 사용하기 위해서는 Cocoapods를 이용하여 프로젝트에 라이브러리를 추가해야 합니다. Podfile에 다음과 같이 라이브러리를 추가합니다.

pod 'NumberMorphView'

그리고 터미널에서 다음 명령어를 실행하여 라이브러리를 설치합니다.

pod install

NumberMorphView 사용하기

먼저, NumberMorphView를 사용할 뷰 컨트롤러에 다음 코드를 추가합니다.

import NumberMorphView

class FeedViewController: UIViewController {

    @IBOutlet weak var likeCountLabel: UILabel!
    var morphView: NumberMorphView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // NumberMorphView 초기화
        morphView = NumberMorphView(frame: likeCountLabel.bounds)
        morphView.delegate = self
        morphView.digitFont = UIFont.systemFont(ofSize: 18)
        morphView.duration = 0.5
        
        // 시작 숫자 설정
        morphView.setValue(0)
        
        likeCountLabel.addSubview(morphView)
    }
    
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        
        // 종료 숫자 설정
        morphView.setValue(1000)
    }
}

extension FeedViewController: NumberMorphViewDelegate {
    func morphView(_ morphView: NumberMorphView, didChangeValueTo value: Double) {
        // 값이 변경될 때 호출되는 메서드
        likeCountLabel.text = String(format: "%.0f", value)
    }
}

위 코드에서는 FeedViewController에서 likeCountLabel라는 라벨을 사용하여 좋아요 수를 표시하고 있습니다. NumberMorphView를 추가하여 부드러운 애니메이션 효과를 만들었습니다.

NumberMorphViewdigitFont 속성을 사용하여 숫자의 폰트를 설정할 수 있습니다. 또한, duration 속성을 사용하여 애니메이션의 속도를 조정할 수 있습니다.

setValue 메서드를 사용하여 시작 숫자와 종료 숫자를 설정할 수 있습니다. 이때, NumberMorphViewDelegate를 구현하여 값이 변경될 때마다 라벨에 표시되도록 처리합니다.

마무리

Swift에서 NumberMorphView를 사용하여 소셜 미디어 피드에 부드러운 숫자 애니메이션 효과를 적용하는 방법을 알아보았습니다. NumberMorphView를 사용하면 다양한 곳에서 숫자를 부드럽게 변화시킬 수 있으며, 사용자들에게 더욱 흥미로운 경험을 제공할 수 있습니다.

해당 라이브러리의 자세한 사용 방법은 공식 GitHub 페이지에서 확인할 수 있습니다.