SwiftUI 图像不会更新

Sim*_*mon 2 xcode image ios swift swiftui

我真的是斯威夫特的新手。我究竟做错了什么?为什么按下时图像没有更新?我找不到任何关于状态监听器的信息。

这是捆绑两个视图的视图:

import SwiftUI

struct FoodContentView: View {
    var body: some View {
        VStack {
            imageView.gesture(tap)
            FoodContentTextView().position(x: bodyWidth/3, y: bodyHeight/2)
        }
    }
}

var imageView = FoodContentImageView(selectedImage: "CheeseBurger")

let tap = TapGesture()
.onEnded { _ in
    if imageView.imageSelected == "Burger" {
        imageView.imageSelected = "CheeseBurger"
        print(imageView.imageSelected)
    } else {
        imageView.imageSelected = "Burger"
        print(imageView.imageSelected)
    }
}
Run Code Online (Sandbox Code Playgroud)

这是定义图像的视图:

struct FoodContentImageView: View {

    var imageSelected: String

    init(selectedImage: String){
        imageSelected = selectedImage
    }

    var body: some View {
        Image(imageSelected).resizable().frame(width: 200, height: 200, alignment: .center).scaledToFit()
    }
}
Run Code Online (Sandbox Code Playgroud)

Moj*_*ini 7

你把事情搞得非常复杂,没有必要。FoodContentImageView只需要知道图像的名称:

struct FoodContentImageView: View {

    var imageName: String

    var body: some View {
        Image(imageName).resizable().frame(width: 200, height: 200, alignment: .center).scaledToFit()
    }
}
Run Code Online (Sandbox Code Playgroud)

而你只需要传入名字即可。如果您将其存储为@State,它将在任何更改时自动更新:

struct ContentView: View {

    @State var text = "CheeseBurger"

    var body: some View {
        VStack {
            FoodContentImageView(imageName: text)
                .onTapGesture {
                    if self.text == "Burger" {
                        self.text = "CheeseBurger"
                    } else {
                        self.text = "Burger"
                    }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

并且根本不需要引用imageViewand 。tapGesture

  • 你是我的英雄 (2认同)