SwiftUI 프로그레스 바 구현: 진행 상태 표시

작성일 :

SwiftUI 프로그레스 바 구현: 진행 상태 표시

SwiftUI는 Apple의 공식 UI 프레임워크로, 선언적 문법을 통해 간편하면서도 강력한 사용자 인터페이스를 구축할 수 있습니다. 이 글에서는 SwiftUI를 활용해 프로그레스 바(progress bar)를 구현하는 방법과 그 출력 예시를 알아봅니다. 프로그레스 바는 애플리케이션 내에서 작업의 진행 상황을 시각적으로 알려주기 위해 사용되는 중요한 UI 요소입니다.

기본 프로그레스 바 구현

SwiftUI에서 기본 프로그레스 바를 구현하기 위해 ProgressView를 사용할 수 있습니다. ProgressView는 매우 간단하게 진행 상태를 시각적으로 나타낼 수 있도록 도와줍니다. 기본적인 사용 예제는 다음과 같습니다.

swift
import SwiftUI

struct ContentView: View {
    var body: some View {
        VStack {
            ProgressView("Loading...")
        }
        .padding()
    }
}

이 코드는 단순히 Loading...이라는 텍스트와 함께 기본 프로그레스 바를 표시합니다. 이 예제는 프로그레스 바를 만드는 가장 기본적인 방법을 보여줍니다. 이제 진행 상태를 업데이트하는 방법을 알아보겠습니다.

프로그레스 상태 관리

프로그레스 바는 일반적으로 사용자의 작업 진행 상태에 의존하므로, 진행 상태를 업데이트하는 기능이 필요합니다. 이를 위해 @State 변수를 사용할 수 있습니다. 예제 코드는 다음과 같습니다.

swift
import SwiftUI

struct ContentView: View {
    @State private var progress: Float = 0.0

    var body: some View {
        VStack {
            ProgressView(value: progress, total: 1.0)
                .progressViewStyle(LinearProgressViewStyle())
                .padding()

            Button(action: {
                if self.progress < 1.0 {
                    self.progress += 0.1
                }
            }) {
                Text("Increment Progress")
            }
            .padding()
        }
    }
}

이 코드에서는 @State 변수를 사용하여 프로그레스 값을 관리하며, 버튼을 클릭할 때마다 값이 증가하도록 하였습니다. 이를 통해 사용자는 현재 작업의 진행 상태를 쉽게 알 수 있습니다.

커스텀 프로그레스 바

기본 제공되는 프로그레스 바 외에도 애플리케이션의 디자인 요구사항에 맞게 커스텀 프로그레스 바를 만들 수 있습니다. 예제를 통해 커스텀한 원형 프로그레스 바를 구현하는 방법을 확인해보겠습니다.

swift
import SwiftUI

struct CircularProgressBar: View {
    var progress: Float

    var body: some View {
        ZStack {
            Circle()
                .trim(from: 0.0, to: CGFloat(min(self.progress, 1.0)))
                .stroke(style: StrokeStyle(lineWidth: 10.0, lineCap: .round, lineJoin: .round))
                .foregroundColor(.blue)
                .rotationEffect(Angle(degrees: 270.0))
                .animation(.linear)

            Text(String(format: "%.0f %%", min(self.progress, 1.0)*100.0))
                .font(.largeTitle)
                .bold()
        }
    }
}

struct ContentView: View {
    @State private var progress: Float = 0.0

    var body: some View {
        VStack {
            CircularProgressBar(progress: progress)
                .frame(width: 150.0, height: 150.0)
                .padding(40.0)

            Button(action: {
                if self.progress < 1.0 {
                    self.progress += 0.1
                }
            }) {
                Text("Increment Progress")
            }
            .padding()
        }
    }
}

위 예제에서는 원형의 커스텀 프로그레스 바를 만들어 사용하였습니다. Circle.trim 메서드를 활용하여 프로그레스 비율에 따라 채워지는 원형 바를 구현하였습니다. 또한, 중앙에 진행 백분율을 텍스트로 표시하여 사용자가 확인할 수 있도록 하였습니다.

결론

SwiftUI를 사용하면 프로그레스 바와 같은 중요한 UI 컴포넌트를 간단하고 효과적으로 구현할 수 있습니다. 기본 제공되는 ProgressView를 이용한 간단한 방법부터 시작하여 사용자 맞춤형 커스텀 프로그레스 바를 만드는 방법까지 다양한 구현 방법을 살펴보았습니다. 이러한 방법들을 조합하여 보다 풍부하고 직관적인 사용자 경험을 제공할 수 있습니다.