From 4a366a661315742662f06cf2ca65f92421477ba2 Mon Sep 17 00:00:00 2001 From: kim-seonwoo Date: Tue, 9 Jan 2024 01:31:39 +0900 Subject: [PATCH] =?UTF-8?q?[Feat/#28]=20Onboarding=20-=20progressView=20?= =?UTF-8?q?=EC=97=AD=EB=B0=A9=ED=96=A5=20=EC=95=A0=EB=8B=88=EB=A7=A4?= =?UTF-8?q?=EC=9D=B4=EC=85=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Views/OnboardingProgressView.swift | 40 ++++++++++++++----- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/HMH_iOS/HMH_iOS/Presentation/Onboarding/Views/OnboardingProgressView.swift b/HMH_iOS/HMH_iOS/Presentation/Onboarding/Views/OnboardingProgressView.swift index be79480..ceeb896 100644 --- a/HMH_iOS/HMH_iOS/Presentation/Onboarding/Views/OnboardingProgressView.swift +++ b/HMH_iOS/HMH_iOS/Presentation/Onboarding/Views/OnboardingProgressView.swift @@ -11,11 +11,18 @@ import SnapKit import Then final class OnboardingProgressView: UIProgressView { - private var progressAmount: Int = 0 + var progressAmount: Int = 0 { + didSet { + if oldValue > progressAmount { + removeProgressBar() + } else { + addProgressBar() + } + } + } - init(progressAmount: Int) { + init() { super.init(frame: .zero) - self.progressAmount = progressAmount configureProgressView() setConstraints() @@ -27,7 +34,7 @@ final class OnboardingProgressView: UIProgressView { private func setConstraints() { self.snp.makeConstraints { - $0.height.equalTo(4.adjustedHeight) + $0.height.equalTo(4.adjusted) } } @@ -38,14 +45,29 @@ final class OnboardingProgressView: UIProgressView { } } - func setProgressBar() { - self.setProgress(Float(self.progressAmount - 1) / 6.0, animated: false) - + private func addProgressBar() { + let startValue = Float(max(0, self.progressAmount - 1)) / 6.0 + let endValue = Float(self.progressAmount) / 6.0 + + self.setProgress(startValue, animated: false) + DispatchQueue.main.async() { UIView.animate(withDuration: 0.5, delay: 0, options: [.beginFromCurrentState, .allowUserInteraction], animations: { [unowned self] in - self.setProgress(Float(self.progressAmount) / 6.0, animated: true) + self.setProgress(endValue, animated: true) }) } } -} + + private func removeProgressBar() { + let startValue = Float(min(6, self.progressAmount + 1)) / 6.0 + let endValue = Float(self.progressAmount) / 6.0 + self.setProgress(startValue, animated: false) + + DispatchQueue.main.async() { + UIView.animate(withDuration: 0.5, delay: 0, options: [.beginFromCurrentState, .allowUserInteraction], animations: { [unowned self] in + self.setProgress(endValue, animated: true) + }) + } + } +}