SwiftUI: показывать вид, пока пользователь не нажмет кнопку

avatar
skincabbage
1 июля 2021 в 19:12
27
0
0

Я работаю над проектом 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))
    }
    
}
Источник
jnpdx
1 июля 2021 в 19:18
0

Посмотрите, что делает @State — это будет описано в руководствах Apple SwiftUI, Hacking With Swift и т. д. Вы можете условно отображать что-то на основе этого состояния. Кроме того, в Swift обычно типы (как и все ваши структуры) имеют имена с заглавной буквы (camelcase).

Ответы (0)