SwiftUi过渡/动画

时间:2019-12-13 00:18:37

标签: swiftui

我是SwiftUI的新手,并且已经成功构建了简单的游戏。  除了我计划实施某种图像动画/过渡以将图像引入视图的所有工作。 图像的格式正确,但是太突然了,希望柔化图像的光泽  我已经尝试过使用动画方法,但是并没有什么区别。  我希望有人能指出我正确的方向。


    var body: some View {


        NavigationView {

            ZStack {

                Image("background")
                    .resizable()
                    .aspectRatio(contentMode: .fill)
                    .scaledToFill()
                    .edgesIgnoringSafeArea(.all)


                VStack {

                        Text("Tap Correct Image")

                            .font(.headline)
                            .foregroundColor(Color.blue)

                    ForEach((0...2), id: \.self) { number in

                        Image(self.naijaObject[number])
                            .resizable()
                            .frame(width: 100, height: 100)
                            .border(Color.black,width: 1)
                            .transition(.slide)
                            .animation(.easeInOut(duration: 1))
                            .onTapGesture {
                                self.pictureTapped(number)
                        }


                    }


                    .navigationBarTitle(Text(processCorrectAnswer))
                    .alert(isPresented: $showAlert) {
                        Alert(title: Text("\(alertTitle), Your score is \(score)"), dismissButton: .default(Text("Continue")) {
                            self.askQuestion()
                        })
                    }
                }//End of VStack

            }//End of

        } //End of Naviagtion View


    } //End of View

    //Function to action which object is tapped
           func pictureTapped(_ tag: Int) {
               if tag == correctAnswer {

                score += 1
                alertTitle = "Correct"
               } else {

                score -= 1
                alertTitle = "Wrong"
               }
            showAlert = true
           }

    //Function to continue the game
    func askQuestion() {
        naijaObject.shuffle()
        correctAnswer = Int.random(in: 0...2)
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

1 个答案:

答案 0 :(得分:0)

我想我理解您想要实现的目标,但是将来最好提供更多代码。在这里,我使用了use Symfony\Component\Console\Input\ArgvInput; $force = (new ArgvInput())->hasParameterOption('--force'); ,其中将变量DispatchQueue.main.asyncAfter(deadline: .now() + 1)更改为showAlert。而且运行顺利,希望对您有所帮助:

true

PS ,不,我没有找到平滑显示警报的方法。对于这种情况,在点击图像时,最好使用struct QuestionGame: View { @State private var showAlert = false @State private var score: Int = 0 @State private var correctAnswer = 1 @State private var tapped = false var body: some View { NavigationView { VStack { Text("Tap Correct Image") .font(.headline) ForEach((0...2), id: \.self) { number in Rectangle() .frame(width: 100, height: 100) .foregroundColor(self.tapped && number == self.correctAnswer ? .green : .black) // you can do anything for animation .animation(.easeInOut(duration: 1.0)) .onTapGesture { self.pictureTapped(number) } } .navigationBarTitle(Text("answer the question")) .alert(isPresented: self.$showAlert) { Alert(title: Text("Your score is \(score)"), dismissButton: .default(Text("Continue")) { self.askQuestion() }) } } } } func pictureTapped(_ tag: Int) { tapped = true if tag == correctAnswer { score += 1 } else { score -= 1 } DispatchQueue.main.asyncAfter(deadline: .now() + 1) { self.showAlert = true } } //Function to continue the game func askQuestion() { tapped = false showAlert = false correctAnswer = Int.random(in: 0...2) } } struct QuestionGame_Previews: PreviewProvider { static var previews: some View { QuestionGame() } } 并将警报(或任何其他视图)的不透明度从0更改为1(带有动画)。