当这些数据是新的“真理之源”时,如何用新数据重绘Shape? 下图显示,只有“ 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
答案 0 :(得分:0)
尝试一下-已通过13.4测试
struct ContentView: View {
@EnvironmentObject var controller : Controller
var body: some View {
VStack {
subviewone()
.environmentObject(controller)
graph(radius: controller.test)
.stroke()
.fill(Color.red)
subviewone()
.environmentObject(controller)
}.padding(.all)
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
.environmentObject(Controller())
}
}
struct graph: Shape {
@State var radius : CGFloat
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-radius), startAngle: Angle.init(degrees: 0), endAngle: Angle.init(degrees: 360), clockwise: true)
}
}
}
struct subviewone: View {
@EnvironmentObject var controller : Controller
var body: some View {
VStack {
Text("******")
Text("\(controller.test)")
Text("******")
}
}
}
class Controller:ObservableObject {
@Published var test : CGFloat = 0
init() {
_ = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) {_ in
self.test+=1
}
}
}
答案 1 :(得分:0)
在 Shape 上,您永远不能一次调用 [ERROR] Failed to execute goal on project dss-asic-xades: Could not resolve dependencies for project eu.europa.ec.joinup.sd-dss:dss-asic-xades:jar:5.8.RC1: Failure to find eu.europa.ec.joinup.sd-dss:dss-asic-common:jar:tests:5.8.RC1 in https://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced -> [Help 1]
和 stroke
,因为第一次调用 fill
或 stroke
返回的是视图,不再是 Shape。< /p>