当新数据成为“真相来源”时,我该如何使用新数据重新绘制形状? 以下示例显示,只有“Text(”...“)”视图随ObservedObject更新。Shape仅绘制一次。
import SwiftUI
struct ContentView: View {
@ObservedObject var cntrl:Controller=Controller()
var body: some View {
VStack {
subviewone(cntrl: cntrl)
graph(cntrl: cntrl)
.stroke()
.fill(Color.red)
subviewone(cntrl: cntrl)
}.padding(.all)
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
struct graph: Shape {
@ObservedObject var cntrl:Controller
func path(in rect: CGRect) -> Path {
print("function beeing called")
return Path { path in
path.addArc(center: CGPoint(x: rect.midX, y: rect.midY), radius: CGFloat(100-cntrl.test), startAngle: Angle.init(degrees: 0), endAngle: Angle.init(degrees: 360), clockwise: true)
}
}
}
struct subviewone: View {
@ObservedObject var cntrl:Controller
var body: some View {
VStack {
Text("******")
Text("\(cntrl.test)")
Text("******")
}
}
}
class Controller:ObservableObject {
@Published var test=0
init() {
_ = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) {_ in
self.test+=1
}
}
}
如果我省略.stroke()和.fill(Color.red),代码就能正常工作。
struct ContentView: View {
@ObservedObject var cntrl:Controller=Controller()
var body: some View {
VStack {
subviewone(cntrl: cntrl)
graph(cntrl: cntrl)
subviewone(cntrl: cntrl)
}.padding(.all)
}
}
感谢您的任何建议。 Libor