SwiftUI100天:使用SwiftUI搭建一个剪刀石头布App(中)

简介: 在本章中,我们继续完成使用SwiftUI搭建一个剪刀石头布App。

image.png

页面样式

在上一章中,我们完成了标题、规则选择、系统出牌的样式部分,我们继续完成下面的样式。

image.png

用户出牌

用户出牌有2层逻辑,一是用户可以选择出什么牌,然后是用户确定出什么牌

对于用户可以选择出什么牌,我们可以先声明一个数组,示例:

@State var gameModels = ["rock", "paper", "scissors"]
复制代码

然后用户可选牌和用户出牌,我们可以声明一个变量判断是否出牌和出了什么牌,示例:

@State var selectedImage: String = ""
@State var isSelected: Bool = false
复制代码

最后构建用户可选牌的样式和用户实际出牌的样式,示例:

// 用户可选牌
func personSelected() -> some View {
    HStack {
        ForEach(gameModels.indices, id: \.self) { item in
            Image(gameModels[item])
                .resizable()
                .aspectRatio(contentMode: .fit)
                .frame(width: 80)
                .clipShape(Circle())
                .onTapGesture {
                    selectedImage = gameModels[item]
                    self.isSelected = true
                }
        }.frame(minWidth: 0, maxWidth: .infinity)
    }
}
// 用户出牌
func personPush() -> some View {
    Image(selectedImage)
        .resizable()
        .aspectRatio(contentMode: .fit)
        .frame(width: 120)
        .clipShape(Circle())
        .onTapGesture {
            self.isSelected = false
        }
}
复制代码

image.png

上述代码中,我们声明了一个可选牌的数组gameModels,然后使用ForEach循环构建了可选牌的样式。

当我们点击可选牌的时候,我们就切换到用户出牌的视图,并且将点击的可选牌传递给用户出牌。

另一方面,用户选择后可能存在后悔行为,我们在用户出牌的视图中再点击用户出牌视图,则我们回到用户出牌的视图。

这样,我们就完成了用户选择出牌的页面样式。

立即猜拳

最后,我们来完成立即猜拳的操作,当用户选择好出拳的牌,那么需要有个操作和系统进行猜拳,示例:

// 立即猜拳
func playGame() -> some View {
    Text("立即猜拳")
        .font(.system(size: 17))
        .frame(minWidth: 0, maxWidth: .infinity, minHeight: 10, maxHeight: 32)
        .padding()
        .foregroundColor(.white)
        .background(Color(red: 51 / 255, green: 51 / 255, blue: 51 / 255))
        .cornerRadius(8)
}
复制代码

image.png

整体样式布局

整体样式布局,我们在body中将已经构建好的元素排布组合,示例:

var body: some View {
    VStack(spacing: 20) {
        titleView()
        ruleView()
        computerPush()
        Spacer()
        Spacer()
        if isSelected {
            personPush()
        } else {
            personSelected()
        }
        Spacer()
        playGame()
    }.padding()
}
复制代码

image.png

恭喜你,样式部分,我们就此已经完成了!

未完待续

下一章,我们将继续完成逻辑部分的内容。

快来动手试试吧。


相关文章
|
iOS开发
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(五)(3)
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(五)
175 0
|
前端开发 数据处理 iOS开发
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(五)(2)
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(五)
101 0
|
iOS开发 Kotlin 容器
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(五)(1)
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(五)
139 0
|
存储 缓存 前端开发
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(四)(2)
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(四)
139 0
|
前端开发 Swift iOS开发
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(四)(1)
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(四)
234 0
|
存储 PHP Swift
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(三)(2)
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(三)
180 0
|
前端开发 iOS开发
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(三)(1)
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(三)
170 0
|
3天前
|
前端开发 Java 开发工具
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
|
4天前
|
Dart 前端开发 Android开发
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
5天前
|
Dart 前端开发 架构师
【01】vs-code如何配置flutter环境-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈-供大大的学习提升
【01】vs-code如何配置flutter环境-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈-供大大的学习提升

热门文章

最新文章