SwiftUI:在复杂视图中确定流
我正在用SwiftUI构建一个锻炼应用程序,想知道控制以下情况的最佳方法 “训练”视图包含练习的视频,在用户必须做的所有练习的多行之后 [短片] [练习1] [练习2] [练习3] 每个[练习1]都是一个自己的视图,包含一个进度条,让用户知道哪个练习当前处于活动状态,还有多少时间 当用户进入屏幕时,第一个练习[练习1]应处于活动状态,进度条应开始设置动画。当时间到了,下一个练习应该激活,直到所有练习都完成 在UIKit中,这将非常容易。我只需要为第一个exercise调用一个“start()”方法,然后有一个回调“exercisesdidfinish”,然后就可以开始下一个练习了 我用SwiftUI尝试了类似的设置,但似乎应该有一种更快捷的方法来实现这一点SwiftUI:在复杂视图中确定流,swift,swiftui,Swift,Swiftui,我正在用SwiftUI构建一个锻炼应用程序,想知道控制以下情况的最佳方法 “训练”视图包含练习的视频,在用户必须做的所有练习的多行之后 [短片] [练习1] [练习2] [练习3] 每个[练习1]都是一个自己的视图,包含一个进度条,让用户知道哪个练习当前处于活动状态,还有多少时间 当用户进入屏幕时,第一个练习[练习1]应处于活动状态,进度条应开始设置动画。当时间到了,下一个练习应该激活,直到所有练习都完成 在UIKit中,这将非常容易。我只需要为第一个exercise调用一个“start()”方
如何使用SwiftUI实现这一点?如果我实现了它,我会创建一个视图作为四个视图的基础视图,以便进行所需的转换。基本视图将有一个计时器来执行以下基于时间的任务
let timer = Timer.publish(every: 0.1, on: .main, in: .common).autoconnect()
可以根据进度分辨率正确设置间隔。然后,我将使用
onReceive
修饰符订阅计时器,并在其中放置一些转换逻辑
我还将使用transition
modifier将任何动画效果应用于过渡
我将简要地向您展示一个伪代码以供参考
struct BaseView: View {
@State private var step: STEP = .first
let timer = Timer.publish(every: 0.1, on: .main, in: .common).autoconnect()
var body: some View {
ZStack {
if step == .first {
FirstStepView()
.transition(.opacity)
} else if step == .second {
SecondStepView()
.transition(.opacity)
}
}
.overlay(progressBar)
.onReceive(timer) { tick in
....
`step` can be changed in proper condition
}
}
var progressBar: some View {
... implement the progress bar ...
}
}