SwiftUI进度指示器ProgressView
SwiftUI进度指示器ProgressView

SwiftUI进度指示器ProgressView

SwiftUI 中,ProgressView 是一个内置的进度指示器,可以显示任务的进度或简单的加载指示器。以下是其常见用法和自定义技巧:

基本用法

import SwiftUI

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

显示加载文本:ProgressView(“Loading…”) 会显示一个活动指示器和文本。

样式:默认使用系统样式的小圆形活动指示器。

指定进度

可以显示一个明确的进度值(0.0 到 1.0):

import SwiftUI

struct ContentView: View {
    @State private var progress: Double = 0.3

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

            Button("Increase Progress") {
                if progress < 1.0 {
                    progress += 0.1
                }
            }
        }
    }
}

value 和 total:分别表示当前进度值和最大值。

样式:LinearProgressViewStyle() 会显示线性进度条,而不是圆形活动指示器。

进度条样式

内置样式

SwiftUI 提供了两种样式:

1、CircularProgressViewStyle:圆形进度指示器。

ProgressView()
    .progressViewStyle(CircularProgressViewStyle())

2、LinearProgressViewStyle:线性进度条。

ProgressView(value: 0.5)
    .progressViewStyle(LinearProgressViewStyle())

自定义样式

可以自定义进度条样式:

struct CustomProgressViewStyle: ProgressViewStyle {
    func makeBody(configuration: Configuration) -> some View {
        ZStack {
            RoundedRectangle(cornerRadius: 10)
                .fill(Color.gray.opacity(0.3))
                .frame(width: 200, height: 10)

            RoundedRectangle(cornerRadius: 10)
                .fill(Color.blue)
                .frame(width: CGFloat(configuration.fractionCompleted ?? 0) * 200, height: 10)
        }
    }
}

struct ContentView: View {
    @State private var progress: Double = 0.4

    var body: some View {
        ProgressView(value: progress)
            .progressViewStyle(CustomProgressViewStyle())
        .padding()
        Button("Increase Progress") {
            if progress < 1.0 {
                progress += 0.1
            }
        }
    }
}

结合异步任务

ProgressView 可用于指示异步任务的加载状态:

struct ContentView: View {
    @State private var isLoading = true

    var body: some View {
        VStack {
            if isLoading {
                ProgressView("Loading...")
            } else {
                Text("Task Complete!")
            }
        }
        .onAppear {
            // 模拟异步任务
            DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
                isLoading = false
            }
        }
    }
}

动画进度条

创建动态进度效果:

struct AnimatedProgressView: View {
    @State private var progress: Double = 0.0

    var body: some View {
        ProgressView(value: progress, total: 1.0)
            .progressViewStyle(LinearProgressViewStyle())
            .padding()
            .onAppear {
                Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true) { timer in
                    progress += 0.05
                    if progress >= 1.0 {
                        timer.invalidate()
                    }
                }
            }
    }
}

总结

ProgressView 在 SwiftUI 中功能灵活,适用于多种场景(任务指示、加载动画等)。可以通过样式、动画以及自定义样式来调整其外观,并结合异步任务使用。

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开放者。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注