Xcode SwiftUI-弹出图像/文本
我正在写一个游戏(我的第一个),我已经设置好了棋盘,并且代码可以为游戏工作。我正在使用SwiftUI堆叠主屏幕。我现在想在玩家扔下一个字母时弹出一个文本/图像。我看过很多游戏,但找不到任何关于如何完成的帮助或指导Xcode SwiftUI-弹出图像/文本,xcode,swiftui,Xcode,Swiftui,我正在写一个游戏(我的第一个),我已经设置好了棋盘,并且代码可以为游戏工作。我正在使用SwiftUI堆叠主屏幕。我现在想在玩家扔下一个字母时弹出一个文本/图像。我看过很多游戏,但找不到任何关于如何完成的帮助或指导 import SwiftUI struct ContentView: View { @State private var showLetters = [String](repeating: "Blank", count: 36) @State private
import SwiftUI
struct ContentView: View {
@State private var showLetters = [String](repeating: "Blank", count: 36)
@State private var testLetters = [String](repeating: "Blank", count: 7)
@State private var originalLetters = [String](repeating: "Blank", count: 7)
@State private var tray = [String](repeating: "Blank", count: 7)
@State private var buttonFrames = [CGRect](repeating: .zero, count: 35)
@State private var score = 0
@State private var lineNo = 0
@State var displayItem: Int = -1
let allowedWords = Bundle.main.words(from: "words.txt")
var body: some View {
VStack(spacing: 5) {
Image("word5sm")
HStack {
ForEach(0..<7) { number in
Letter(text: self.showLetters[number], index: number, onChanged: self.letterMoved, onEnded: self.letterDropped)
.allowsHitTesting(false)
.overlay(
GeometryReader { geo in
Color.clear
.onAppear {
self.buttonFrames[number] = geo.frame(in: .global)
}
}
)
}
}
HStack {ForEach(7..<14) { number in
Letter(text: self.showLetters[number], index: number, onChanged: self.letterMoved, onEnded: self.letterDropped)
.allowsHitTesting(false)
.overlay(
GeometryReader { geo in
Color.clear
.onAppear {
self.buttonFrames[number] = geo.frame(in: .global)
}
}
)
}
}
HStack {ForEach(14..<21) { number in
Letter(text: self.showLetters[number], index: number, onChanged: self.letterMoved, onEnded: self.letterDropped)
.allowsHitTesting(false)
.overlay(
GeometryReader { geo in
Color.clear
.onAppear {
self.buttonFrames[number] = geo.frame(in: .global)
}
}
)
}
}
HStack {ForEach(21..<28) { number in
Letter(text: self.showLetters[number], index: number, onChanged: self.letterMoved, onEnded: self.letterDropped)
.allowsHitTesting(false)
.overlay(
GeometryReader { geo in
Color.clear
.onAppear {
self.buttonFrames[number] = geo.frame(in: .global)
}
}
)
}
}
HStack {ForEach(28..<35) { number in
Letter(text: self.showLetters[number], index: number, onChanged: self.letterMoved, onEnded: self.letterDropped)
.allowsHitTesting(false)
.overlay(
GeometryReader { geo in
Color.clear
.onAppear {
self.buttonFrames[number] = geo.frame(in: .global)
}
}
)
}
}
HStack {
ResetButton {
self.returnLetters()
}
NewLine {
self.newLine()
}
CalcButton {
self.calcButton()
}
}
HStack {
ForEach(0..<7) { number in
Letter(text: self.tray[number], index: number, onChanged: self.letterMoved, onEnded: self.letterDropped)
}
}
}
.frame(width: 768, height: 856)
.background(Image("Background"))
.onAppear(perform: startGame)
.allowsHitTesting(true)
}
This is my code for the main screen....
导入快捷界面
结构ContentView:View{
@国家私有变量showLetters=[String](重复:“空白”,计数:36)
@国家私有var testLetters=[String](重复:“空白”,计数:7)
@国家私有变量originalLetters=[String](重复:“空白”,计数:7)
@国家私有变量托盘=[String](重复:“空白”,计数:7)
@状态私有变量buttonFrames=[CGRect](重复:.0,计数:35)
@国有私营企业风险值得分=0
@国家私有变量lineNo=0
@状态变量displayItem:Int=-1
让allowedWords=Bundle.main.words(来自:“words.txt”)
var body:一些观点{
VStack(间距:5){
图像(“word5sm”)
HStack{
ForEach(0..我可能误解了你的要求。我不能用你的例子,所以我不得不自己做:
这就利用ZStack
在GameView
上方通过转换
绘制文本
…注意带动画
块以激活转换
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)
}
}
}
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()
}
}
}
}
}
我希望这能有所帮助!我可能误解了你的要求。我不能用你的例子,所以我不得不自己做:
这就利用ZStack
在GameView
上方通过转换
绘制文本
…注意带动画
块以激活转换
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)
}
}
}
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()
}
}
}
}
}
我希望这有帮助!您可以使用ZStack
和if
语句,根据Bool
状态显示或隐藏文本。使用transition
添加精美的动画…您的示例显然不适合我,因为您没有提供运行它所需的所有代码。您可以使用ZStack
带有if
语句,根据Bool
状态显示或隐藏文本。使用transition
添加奇特的动画…您的示例显然不适合我,因为您没有提供运行该示例所需的所有代码。谢谢您,非常理想,并了解其工作原理。再次感谢此works很好,我也可以使用图像而不是文本。问题是,我在GameView或ContentView之外有一些函数,我(可以)怎么做从这些函数中更改showText bool?这取决于它们的位置……如果这回答了您的问题,请接受。如果您还有其他问题,请提出新问题。@Lynxbcia接受,谢谢。这些函数都在GameView中,但我似乎无法从GameView中设置showText。我将尝试发布新问题,但我不知道我在问什么。在GameView
中使用Binding
,并从ContentView
中传递它……然后你可以在内部更改它!谢谢你,理想的,并了解它是如何工作的。再次感谢这项工作很好,我也可以使用图像而不是文本。问题,我在GameView或ContentView之外有一些函数,如何使用我会(我能)从这些函数中更改showText bool?这取决于它们的位置……如果这回答了您的问题,请接受。如果您还有其他问题,请提出新问题。@Lynxbcia接受,谢谢。这些函数都在GameView中,但我似乎无法从GameView中设置showText。我将尝试发布新问题,但不确定我在问什么,请在GameView
中使用Binding
,并从ContentView
中传递它……然后您可以在中更改它!