Отображение индикатора активности или представления прогресса очень важно, чтобы показать, что задача приближается к завершению. Это жизненно важный элемент пользовательского интерфейса, отсутствие которого создает у пользователя впечатление, что приложение зависло.

В этом блоге я покажу, как использовать как определенные, так и неопределенные типы прогресса.

Определить ProgressView:

Чтобы создать определенное представление хода выполнения, инициализируйте ProgressView с привязкой к числовому значению, которое отслеживает ход выполнения. По умолчанию прогресс равен 0,0, а итог равен 1,0.

@State private var progressPercent = 0.1
VStack {
ProgressView(value: progress)
Button(“Increase”, action: { progress += 0.1} )
}

Неопределенный ProgressView:

Чтобы создать неопределенное представление прогресса, используйте инициализатор без значения прогресса.

var body: some View{
ProgressView()
}

Стиль представления прогресса:

Чтобы настроить внешний вид и взаимодействие представлений хода выполнения, создав стили, соответствующие протоколу ProgressViewStyle.

В приведенном ниже примере показан настраиваемый стиль кругового просмотра хода выполнения.

struct CircularProgressIndicatorStyle: ProgressViewStyle {
var strokeColor = Color.blue
var strokeWidth = 14.0
@State private var isLoading = false
func makeBody(configuration: Configuration) -> some View {
return ZStack {
// Background circle
Circle()
.stroke(Color(.systemGray5), lineWidth: 14)
.frame(width: 100, height: 100)
Circle()
.trim(from: 0, to: 0.2)
.stroke(strokeColor, style: StrokeStyle(lineWidth: strokeWidth, lineCap: .round))
.frame(width: 100, height: 100)
.rotationEffect(Angle(degrees: isLoading ? 360 : 0))
.animation(Animation.linear(duration: 1).repeatForever(autoreverses: false), value: isLoading)
.onAppear() {
self.isLoading = true
}
}
}
}