SwiftUI之猜国旗APP及色彩类控件

15 篇文章 2 订阅
7 篇文章 4 订阅

源码地址

效果图

在这里插入图片描述
在这里插入图片描述

思路

  1. 添加背景色
  2. 控件垂直排列
  3. 点击事件处理

代码实现

struct ContentView: View {
    
    @State private var showAlert = false
    @State private var alertTitle = ""
    
    @State private var countries = ["中国", "日本", "法国", "德国", "意大利", "俄罗斯", "英国", "美国"]
    @State private var currentCountry = Int.random(in: 0...2)
    
    
    var body: some View {
        ZStack {
            // 添加一个线性渐变背景
            LinearGradient(gradient: Gradient(colors: [.green, .blue]), startPoint: .top, endPoint: .bottom)
                .edgesIgnoringSafeArea(.all)
            
            VStack(spacing: 40) {
                VStack(spacing: 10) {
                    Text("以下国家的旗帜是哪一个")
                        .foregroundColor(.white)
                        .font(.subheadline)
                    
                    Text(countries[currentCountry])
                        .foregroundColor(.white)
                        .font(.largeTitle)
                        .fontWeight(.black)
                }
                VStack(spacing: 20) {
                    ForEach(0..<3, id: \.self) { num in
                        Button(action: {
                            self.alertTitle = num == self.currentCountry ? "答对了" : "答错了"
                            self.showAlert = true
                        }) {
                            Image(self.countries[num])
                                .renderingMode(.original)
                                .clipShape(Capsule())
                                .overlay(Capsule().stroke(Color.black, lineWidth: 1))
                                .shadow(color: .black, radius: 2.0 )
                        }
                    }
                }
                Spacer()
            }
            
        }
        .alert(isPresented: $showAlert) {
            Alert(title: Text(self.alertTitle),
                  message: nil,
                  dismissButton: .default(Text("继续"), action: {
                    // 源数据重新洗牌
                    self.next()
                  }))
        }
        
    }
    
    func next() {
        countries.shuffle()
        currentCountry = Int.random(in: 0...2)
    }
}

参考:
Lebus系列教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值