在ContentView中,我有一个Zstack图像,其中有一个var showText,可以使用创建的按钮来打开和关闭它。
struct ContentView: View {
@State var showText = true
@State var attempts: Int = 0
var body: some View {
ZStack {
VStack {
GameView()
Button(action: {
withAnimation {
self.showText.toggle()
self.attempts += 1
}
}, label: {
Text("Show / Hide Text")
})
}
if self.showText {
VStack {
Spacer()
HStack {
Spacer()
Image("word5sm")
.modifier(Shake(animatableData: CGFloat(attempts)))
Spacer()
}
Spacer()
}
}
}
}
}
struct GameView: View {
@State private var showLetters = ...... etc etc
但是,我不需要ContentView中的按钮。我想从我的GameView中切换此变量。因此,当用户在游戏中添加图块时,它会弹出图像。
如何从GameView切换ContentView中设置的var?
谢谢
答案 0 :(得分:0)
我实际上只是编辑了原始问题,即您在评论中的位置:
https://stackoverflow.com/a/59863781/5981293
我在Button
内添加了GameView
,现在可以切换您传入的Binding
。
您可以为此使用@Binding
struct GameView: View {
@Binding var showText: Bool
var body: some View {
VStack {
Rectangle()
.foregroundColor(.blue)
.frame(width: 80, height: 180)
Circle()
.foregroundColor(.red)
.frame(width: 50)
Rectangle()
.foregroundColor(.green)
.frame(width: 150, height: 110)
Button(action: {
withAnimation {
self.showText.toggle()
}
}, label: {
Text("Toggle from within GameView")
})
}
}
}
struct ContentView: View {
@State var showText = false
var body: some View {
ZStack {
VStack {
GameView(showText: self.$showText)
Button(action: {
withAnimation {
self.showText.toggle()
}
}, label: {
Text("Show / Hide Text")
})
}
if self.showText {
VStack {
Spacer()
HStack {
Spacer()
Text("Hello I am a Text")
.foregroundColor(.orange)
.font(.system(.largeTitle))
.transition(.opacity)
Spacer()
}
Spacer()
}
}
}
}
}
感谢您再次询问!