Я работаю над проектом SwiftUI, который показывает изображение и предоставляет три кнопки. Когда пользователь нажимает кнопку, он показывает следующее изображение. Например, есть изображение льва и три кнопки с надписью «Лев», «Тигр» и «Бегемот». У меня возникли проблемы с выяснением того, как заставить приложение оставаться на изображении «льва», пока пользователь не нажмет одну из кнопок. Любая помощь приветствуется.
import SwiftUI
struct learnAnimalsView: View {
var correctChar: Bool = false
let buttonPadding: CGFloat = 5
let houseSize: CGFloat = 56
// an array to store the name of the animal pictures
private let characterPics = ["ntc_lion", "ntc_tiger", "ntc_hippo", "ntc_salmon", "ntc_zebra", "ntc_wolf"]
//an array of the names of the animals
private let characterNames = ["lion", "tiger", "hippo", "salmon", "zebra", "wolf"]
var body: some View {
ZStack {
aCharacterView(myImage: characterPics[0], characterInImage: characterNames[0])
/////////////////////////////////////////////
//PAUSE HERE UNTIL THE USER PUSHES A BUTTON//
/////////////////////////////////////////////
aCharacterView(myImage: characterPics[1], characterInImage: characterNames[1])
}
}
}
private struct aCharacterView: View {
let myImage: String
let characterInImage: String
let buttonPadding: CGFloat = 5
var body: some View {
ZStack {
VStack {
// An image with one of the animals
AddImageView(imageToAdd: myImage)
HStack {
createButton(buttonMessage: characterInImage, charInImage: myImage)
createButton(buttonMessage: "tiger", charInImage: myImage)
createButton(buttonMessage: "hippo", charInImage: myImage)
}.frame(alignment: .bottom)
}.background(Color.black)
// a house icon that brings you back to the main menu
HStack {
Spacer()
GoToMainMenuIconView()
.frame(maxHeight: .infinity, alignment: .topTrailing)
}
}
}
}
// a subview that creates a new button with the text passed as a parameter
struct createButton: View {
let buttonMessage: String
let charInImage:String
private let buttonHeight: CGFloat = 15
private let theCornerRadius: CGFloat = 40
var body: some View {
Button(action: {
if(buttonMessage.suffix(4) == charInImage.suffix(4)) {
}
})
{
Text(buttonMessage)
.frame(height: buttonHeight)
.font(.title)
.padding()
.background(Color.green)
.foregroundColor(.white)
.cornerRadius(theCornerRadius)
.background(Capsule())
}
}
}
private struct createNewTextView: View {
let characterName: String
private let buttonPadding: CGFloat = 5
private let buttonCurve: CGFloat = 10
private let fontSize: CGFloat = 20
var body: some View {
Text(characterName)
.padding(buttonPadding)
.background(Color.green)
.clipShape(RoundedRectangle(cornerRadius: buttonCurve))
.foregroundColor(.white)
.font(.system(size: fontSize, weight: .heavy, design: .default))
}
}
Посмотрите, что делает
@State
— это будет описано в руководствах Apple SwiftUI, Hacking With Swift и т. д. Вы можете условно отображать что-то на основе этого состояния. Кроме того, в Swift обычно типы (как и все ваши структуры) имеют имена с заглавной буквы (camelcase).