Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swiftui 形状不会重新绘制自身_Swiftui_Shapes_Redraw - Fatal编程技术网

Swiftui 形状不会重新绘制自身

Swiftui 形状不会重新绘制自身,swiftui,shapes,redraw,Swiftui,Shapes,Redraw,当这些数据是新的“真相来源”时,我如何用新数据重新绘制形状? 下面显示的是,只有“文本(“…”)视图使用ObservedObject更新。形状只绘制一次自身 import SwiftUI struct ContentView: View { @ObservedObject var cntrl:Controller=Controller() var body: some View { VStack { subviewone(cntrl: c

当这些数据是新的“真相来源”时,我如何用新数据重新绘制形状? 下面显示的是,只有“文本(“…”)视图使用ObservedObject更新。形状只绘制一次自身

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),代码就可以工作

谢谢你的建议。
伦敦银行同业拆借利率(Libor)

试试这个——用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
        }
    }

}

关于形状,你永远不能一次调用
stroke
fill
,因为第一次调用
stroke
fill
返回一个视图,不再是形状。

再次感谢你,克里斯。我不得不将第一个“@EnvironmentObject var controller:controller”更改为“@ObservedObject var controller=controller()“然后它成功了。你明白为什么我的版本不起作用吗?当我删除.stroke()和.fill(Color.red)时,形状对象开始按预期重新绘制,代码正常工作。只是我得到了一个圆,而不仅仅是边界。
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
        }
    }

}