如何解决当用户单击正确的答案时,如何使quizView以绿色onTapGesture出现
我正在制作一个语言应用程序,希望用户在点击该应用程序后以绿色显示正确的答案,但我一直在努力。
这是我要实现此行为的代码部分。
from collections import defaultdict
df1.Leads + df1.Name.map(defaultdict(int,df2.to_numpy()))
Out[38]:
0 22
1 24
2 28
3 15
4 16
5 15
6 30
dtype: int64
Grid(viewModel.answers)-为答案气泡创建Grid和Gridlayout。
用户界面的屏幕截图
解决方法
您的answerBubble
是您要更新的视图。因此,此视图需要使用某种类型的参数来更改其填充颜色。
让我们假设,如果用户点击正确的答案,则背景变为绿色;如果未点击,则背景保持黑色;否则,背景变为红色。我会在您的主视图中创建一个有状态的已窃听答案列表:
@State private var tappedAnswers = [LearnModel.Answer]()
这将创建一个空白列表,您可以随时跟踪。用户点击quizView
后,如果尚未将其添加到列表中,则应将其添加到列表中(您确实可以使用Set
进行此操作,但是我坚持使用数组,因为它很熟悉)。
quizView(answer: answer).onTapGesture {
// Add the new answer to the list of tapped answers
if !tappedAnswers.contains(answer) {
tappedAnswers.append(answer)
}
// Do any animation work you need in here
}
我对您的应用程序的其余部分不熟悉,但是您需要存储正确的答案并将其与所选答案进行比较。我们现在将其称为correctAnswer
。
现在,您可以添加一个函数,为每个answerBubble
确定合适的填充颜色:
func colorFor(answer: LearnModel.Answer,correctAnswer: LearnModel.Answer) -> Color {
if answer == correctAnswer {
// Check for correct answer right away; order matters here.
return Color.green
} else if tappedAnswers.contains(correctAnswer) {
// The user tapped the answer,but it wasn't correct.
return Color.red
} else {
// The user hasn't tapped this answer yet.
return Color.black
}
}
最后,向answerBubble
添加一个参数,该参数接受一个fillColor
变量,该变量使您可以传入此新创建的颜色方法(尽管您需要使它成为正确的SwiftUI视图)。>
struct AnswerBubble: View {
let fillColor: Color
var body: some View {
RoundedRectangle(cornerRadius: 20)
.fill(fillColor)
.shadow(color: Color.black,radius: 20,y: 5)
.opacity(0.2)
.padding()
}
}
还要确保将fillColor
传递给quizView
,因为它需要将其传递给answerBubble
。现在,您可以在ForEach
循环中使用它。添加完参数后,它应该如下所示:
quizView(
answer: answer,fillColor: self.colorFor(
answer: answer,correctAnswer: correctAnswer
)
)
(此外,由于它不是变量,因此考虑将quizView
重命名为QuizView
)
我不知道您的LearnModel
的详细信息,但是您应该能够根据需要进行调整。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。