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

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

未完待续

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

快来动手试试吧。


相关文章
|
10月前
|
iOS开发
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(五)(3)
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(五)
135 0
|
10月前
|
前端开发 数据处理 iOS开发
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(五)(2)
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(五)
84 0
|
10月前
|
iOS开发 Kotlin 容器
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(五)(1)
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(五)
107 0
|
10月前
|
存储 缓存 前端开发
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(四)(2)
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(四)
112 0
|
10月前
|
前端开发 Swift iOS开发
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(四)(1)
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(四)
171 0
|
10月前
|
存储 PHP Swift
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(三)(2)
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(三)
136 0
|
10月前
|
前端开发 iOS开发
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(三)(1)
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(三)
121 0
|
2天前
|
XML 移动开发 前端开发
使用duxapp开发 React Native App 事半功倍
对于Taro的壳子,或者原生React Native,都会存在 `android` `ios`这两个文件夹,而在duxapp中,这些文件夹的内容是自动生成的,那么对于需要在这些文件夹中修改的配置内容,例如包名、版本号、新架构开关等,都通过配置文件的方式配置了,而不需要需修改具体的文件
|
2天前
|
存储 开发工具 Android开发
使用.NET MAUI开发第一个安卓APP
【9月更文挑战第24天】使用.NET MAUI开发首个安卓APP需完成以下步骤:首先,安装Visual Studio 2022并勾选“.NET Multi-platform App UI development”工作负载;接着,安装Android SDK。然后,创建新项目时选择“.NET Multi-platform App (MAUI)”模板,并仅针对Android平台进行配置。了解项目结构,包括`.csproj`配置文件、`Properties`配置文件夹、平台特定代码及共享代码等。
|
27天前
|
Web App开发 Java 视频直播
FFmpeg开发笔记(四十九)助您在毕业设计中脱颖而出的几个流行APP
对于软件、计算机等专业的毕业生,毕业设计需实现实用软件或APP。新颖的设计应结合最新技术,如5G时代的音视频技术。示例包括: 1. **短视频分享APP**: 集成FFmpeg实现视频剪辑功能,如添加字幕、转场特效等。 2. **电商购物APP**: 具备直播带货功能,使用RTMP/SRT协议支持流畅直播体验。 3. **同城生活APP**: 引入WebRTC技术实现可信的视频通话功能。这些应用不仅实用,还能展示开发者紧跟技术潮流的能力。
63 4
FFmpeg开发笔记(四十九)助您在毕业设计中脱颖而出的几个流行APP

热门文章

最新文章