[swift] Swift PKHUD로 사용자 정의 애니메이션을 실행하는 방법은?

Swift PKHUD는 사용자에게 애니메이션으로 로딩 혹은 진행 중임을 시각적으로 알려주기 위해 사용되는 오픈 소스 라이브러리입니다. 기본 제공되는 애니메이션 외에도 원하는 대로 사용자 정의 애니메이션을 실행할 수 있습니다.

다음은 Swift PKHUD로 사용자 정의 애니메이션을 실행하는 방법입니다.

  1. PKHUD 라이브러리를 프로젝트에 추가하고 import 문을 추가합니다.
    import PKHUD
    
  2. 원하는 애니메이션을 구현합니다. PKHUDProgressView를 서브클래싱하여 원하는 애니메이션을 만들 수 있습니다. 예를 들어, 원모양으로 회전하는 사용자 정의 애니메이션을 만들어보겠습니다.
    class CustomProgressView: PKHUDProgressView {
     private let shapeLayer = CAShapeLayer()
        
     override func commonInit() {
         super.commonInit()
            
         shapeLayer.lineWidth = 3.0
         shapeLayer.strokeColor = UIColor.white.cgColor
         shapeLayer.fillColor = UIColor.clear.cgColor
         layer.addSublayer(shapeLayer)
     }
        
     override func layoutSubviews() {
         super.layoutSubviews()
            
         let center = CGPoint(x: bounds.midX, y: bounds.midY)
         let radius = min(bounds.width, bounds.height) / 2.0 - shapeLayer.lineWidth
            
         let circularPath = UIBezierPath(arcCenter: center, radius: radius, startAngle: -.pi / 2, endAngle: .pi * 1.5, clockwise: true)
            
         shapeLayer.path = circularPath.cgPath
     }
        
     override func startAnimation() {
         super.startAnimation()
            
         let rotationAnimation = CABasicAnimation(keyPath: "transform.rotation")
         rotationAnimation.fromValue = 0
         rotationAnimation.toValue = CGFloat(Double.pi * 2)
         rotationAnimation.duration = 1
         rotationAnimation.repeatCount = .infinity
            
         shapeLayer.add(rotationAnimation, forKey: "rotationAnimation")
     }
        
     override func stopAnimation() {
         super.stopAnimation()
            
         shapeLayer.removeAllAnimations()
     }
    }
    
  3. 애니메이션을 사용하기 위해 PKHUD.sharedHUDcontentView를 원하는 애니메이션 뷰로 설정합니다.
    let progressView = CustomProgressView()
    PKHUD.sharedHUD.contentView = progressView
    
  4. 원하는 시점에 애니메이션을 시작하고 종료합니다.
    PKHUD.sharedHUD.show()
    // 애니메이션 실행 중...
    PKHUD.sharedHUD.hide(afterDelay: 2.0) // 2초 후 애니메이션 종료
    

위와 같이 PKHUD의 PKHUDProgressView를 서브클래싱하여 사용자 정의 애니메이션을 실행할 수 있습니다. 이를 통해 어플리케이션에 맞는 맞춤 애니메이션을 손쉽게 구현할 수 있습니다.

참고 자료