[SwiftUI] ProgressView 생성하기

2025. 1. 15. 16:49·Apple/SwiftUI
728x90
반응형

안녕하세요! 피피아노입니다 🎵

 

 

이번 포스팅에서는 SwiftUI에서 작업 완료까지의 진행률을 보여줄 수 있는 ProgressView를 만드는 방법에 대해서 정리를 해보려고 합니다.

 

그럼 바로 시작하겠습니다!

 

ProgressView란?

먼저 개념부터 짚고 넘어가겠습니다. 

 

ProgressView는 이름에서 유추할 수 있듯이 앱 내에서 작업이 진행되고 있는 정도를 시각적으로 표시하는 View입니다.

 

이러한 ProgressView가 필요한 순간은 여러가지가 있겠지만 대표적인 예시로는 파일 다운로드 진행 상태를 앱에 표시하거나, 작업이 진행 중이지만 얼마나 오래 걸릴지 알 수 없을 때 등 다양한 상황에서 사용됩니다.

 

ProgressView 스타일

SwiftUI에서 ProgressView 스타일은 선형 스타일, 원형 스타일, 불확정적 스타일 이렇게 3가지로 나누어서 나타낼 수 있습니다.

선형 스타일
원형 스타일
불확정적 스타일

선형 스타일은 주로 파일 다운로드나 업로드의 진행 상태를 표시할 때나 긴 작업의 진행률을 시각적으로 표현할 때 사용합니다.

 

원형 스타일은 제한된 공간에서 진행률을 표시해야 할 때 사용하거나 목표 달성률이나 완료율을 시각적으로 표현할 때 주로 사용하는데 일일 운동 목표가 이러한 스타일로 사용됩니다.

 

그리고 불확정적 스타일은 데이터를 불러오는 중임을 나타내거나 API 요청의 로딩 상태를 표시할 때, 혹은 작업 완료 시간을 예측할 수 없는 경우에 주로 사용되는 스타일입니다.

 

ProgressView 제작하기

먼저 선형 스타일 ProgressView를 만들어보겠습니다.

struct ContentView: View {
    @State private var progress = 0.0
    
    var body: some View {
        VStack {
            Text("선형 프로그레스")
            ProgressView(value: progress, total: 100)
                .progressViewStyle(.linear)
                .padding()
        }
        .onAppear {
            Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true) { timer in
                if progress < 100 {
                    progress += 1
                } else {
                    timer.invalidate()
                }
            }
        }
    }
}

코드를 살펴보자면 먼저 @State 프로퍼티 래퍼를 사용해서 진행률을 추적하도록 해주었습니다.

 

그리고 value와 total 파라미터로 현재 진행률을 백분율로 표시해주었고 .linear 스타일로 가로 막대 형태로 진행률을 보여줄 수 있도록 설정하였습니다.

 

그리고 Timer를 사용해서 0.1초마다 진행률이 1씩 증가하도록 구현해주었습니다.

 

 

 

이제 원형 스타일로도 만들어보겠습니다.

struct ContentView: View {
    @State private var progress = 0.0
    
    var body: some View {
        VStack {
            ProgressView(value: progress, total: 100)
                .progressViewStyle(CircularProgressViewStyle())
                .padding()
        }
    }
}

원형 스타일은 이렇게 만들 수 있는데 아마 여러분들이 프리뷰나 시뮬레이터로 확인해보시면 불확정적 스타일로 나타나는 걸 확인할 수 있는데 잘못 하신 건 아니고 이 스타일은 macOS에서만 확인할 수 있는 스타일이라서 그런 거니까 macOS를 타깃으로 테스트를 해보시면 될 것 같습니다!

 

다음은 마지막 스타일인 불확정적 스타일입니다.

struct ContentView: View {
    var body: some View {
        VStack {
            Text("불확정적 프로그레스")
            ProgressView()
                .progressViewStyle(.circular)
                .padding()
        }
    }
}

불확정적 스타일은 이런 식으로 만들 수 있는데 스피닝 인디케이터(spinning indicator)를 표시하고 진행률을 나타내는 값 바인딩을 포함하지 않고 ProgressView를 사용하여 선언됩니다.

 

간단하죠?

 

 

 

ProgressView는 단순히 UI를 나타내는 부분이라 크게 어려운 부분 없이 구현할 수 있습니다. 나중에 ProgressView를 활용해서 데이터 처리 진행률과 연동하는 법도 공부해서 포스팅할 수 있도록 하겠습니다!


감사합니다.

 

잘못된 내용이 있거나 더 좋은 내용 피드백은 언제나 환영합니다!

궁금하신 부분은 댓글로 질문 부탁드립니다!

728x90
반응형

'Apple > SwiftUI' 카테고리의 다른 글

[SwiftUI] NavigationStack 사용 시 화면 전환 안 되는 문제와 title 깨짐 문제 트러블슈팅  (0) 2025.06.03
[SwiftUI] SwiftUI로 카메라 기능 구현하기  (2) 2025.03.01
[SwiftUI] 애니메이션과 전환 간단하게 알아보기  (8) 2024.10.02
[SwiftUI] SwiftUI와 UIKit 통합하기 (2/2)  (2) 2024.09.21
[SwiftUI] SwiftUI와 UIKit 통합하기 (1/2)  (5) 2024.09.14
'Apple/SwiftUI' 카테고리의 다른 글
  • [SwiftUI] NavigationStack 사용 시 화면 전환 안 되는 문제와 title 깨짐 문제 트러블슈팅
  • [SwiftUI] SwiftUI로 카메라 기능 구현하기
  • [SwiftUI] 애니메이션과 전환 간단하게 알아보기
  • [SwiftUI] SwiftUI와 UIKit 통합하기 (2/2)
P_Piano
P_Piano
Apple 생태계 개발자가 되기 위한 학습과 경험의 기록
    반응형
    250x250
  • P_Piano
    피피아노의 개발 일지
    P_Piano
  • 전체
    오늘
    어제
    • 분류 전체보기 (205) N
      • Apple (123) N
        • iOS (22)
        • visionOS (4)
        • Swift (66)
        • UIKit (2)
        • SwiftUI (23) N
        • RxSwift (2)
        • Xcode (4)
      • C언어 (5)
      • C++ (8)
      • Dart (1)
      • Python (3)
      • JavaScript (17)
      • Git (1)
      • CS (39)
        • 디자인 패턴 (6)
        • 네트워크 (20)
        • 운영체제 (8)
        • Database (5)
        • 자료구조 (0)
      • IT 지식 (2)
      • IT 뉴스 (4)
      • 출처 표기 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    오블완
    ios
    디자인패턴
    함수
    네트워크
    UIKit
    swiftUI
    변수
    옵셔널
    운영체제
    combine
    이니셜라이저
    프로퍼티 래퍼
    visionOS
    티스토리챌린지
    프로그래머스
    제어문
    자바스크립트
    Xcode
    Initializers
    코딩테스트
    스위프트
    SWIFT
    비동기
    프로세스
    Vision Pro
    클래스
    Optional
    연산자
    배열
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
P_Piano
[SwiftUI] ProgressView 생성하기
상단으로

티스토리툴바