让人惊艳的高级配色,让你的色彩灵感爆棚!

简介: 在本章中,你将学会使用SwiftUI搭建一个纯色背景App。

image.png

项目背景

无意中在刷B站的时候,看到一些很温馨的颜色搭配,让人充满灵感

以前就很喜欢使用纯色背景,经常会用纯色背景图片作为壁纸。

那么本章中,我们就尝试使用SwiftUI搭建一个纯色背景App

项目搭建

首先,创建一个新的SwiftUI项目,命名为SolidColor

image.png

模型搭建

首先,我们先创建一个数据模型,我们命名为Model

struct Model:Identifiable {
    var id:UUID
    var color:Color
    var colorName:String
    var colorRGBName:String
}
复制代码

image.png

上述代码中,我们创建了一个Model结构体,遵循Identifiable协议。

Identifiable协议可以帮助我们定位到数据源的id,当我们的示例数据存在2条或者多条一模一样的数据时,会展示多条而不是合并为一条。

然后我们声明了几个变量:id作为唯一标识符color背景颜色colorName颜色名称colorRGBName为对应颜色的RGB颜色值名称。

完成后,我们来创建一些示例数据,示例:

var models = [
    Model(colorName: "草莓红", color: Color(red: 228/255, green: 45/255, blue: 68/255), colorRGBName: "#E42D44"),
    Model(colorName: "奶油白", color: Color(red: 250/255, green: 239/255, blue: 222/255), colorRGBName: "#FAEFDE"),
    Model(colorName: "泥猴桃绿", color: Color(red: 123/255, green: 173/255, blue: 95/255), colorRGBName: "#7BAD5F"),
    Model(colorName: "小麦黄", color: Color(red: 229/255, green: 215/255, blue: 173/255), colorRGBName: "#E5D7AD"),
    Model(colorName: "板栗灰", color: Color(red: 97/255, green: 79/255, blue: 77/255), colorRGBName: "#614F4D"),
    Model(colorName: "柠檬黄", color: Color(red: 255/255, green: 216/255, blue: 0/255), colorRGBName: "#FFD800"),
    Model(colorName: "葡萄紫", color: Color(red: 91/255, green: 52/255, blue: 99/255), colorRGBName: "#5B3663"),
    Model(colorName: "青豆绿", color: Color(red: 188/255, green: 207/255, blue: 144/255), colorRGBName: "#BCCF90"),
    Model(colorName: "水蜜桃粉", color: Color(red: 246/255, green: 160/255, blue: 154/255), colorRGBName: "#F6A09A")
]
复制代码

image.png

就此,数据部分我们就准备好了。

页面样式

我们再来分析下交互逻辑,首先我们要实现左右拖动切换页面,这个我们可以使用到TabView组件作为我们的核心视图,示例:

TabView { 
    //代码块
}
.tabViewStyle(PageTabViewStyle())
.edgesIgnoringSafeArea(.all)
复制代码

由于要实现滚动,那么在TabView视图的基础上,还需要使用tabViewStyle修饰符进行修饰,我们使用PageTabViewStyle样式。

另外为了实现整个屏幕都是纯色背景效果,我们使用edgesIgnoringSafeArea修饰符,将iPhone安全区域去掉。

内容结构部分,我们可以使用ForEach循环遍历我们的示例数据数组models的数据,示例:

TabView { 
    ForEach(models) { item in    
    //代码块
    }    
}
.tabViewStyle(PageTabViewStyle())
.edgesIgnoringSafeArea(.all)
复制代码

内容显示部分,我们的背景颜色颜色名称颜色RGB值的排布方式是文字浮在背景上,因此这里我们可以使用ZStack视图,示例:

TabView { 
    ForEach(models) { item in    
         ZStack {
            item.color.edgesIgnoringSafeArea(.all)
            //文字部分
        }
    }    
}
.tabViewStyle(PageTabViewStyle())
.edgesIgnoringSafeArea(.all)
复制代码

上述代码中,我们填充了一个背景颜色,我们看看效果。

image.png

最后是文字部分,我们使用VStack纵向布局的方式排布颜色名称RGB颜色值。示例:

TabView {
    ForEach(models) { item in
        ZStack {
            item.color.edgesIgnoringSafeArea(.all)
            VStack(alignment: .center, spacing: 20) {
                Text(item.colorName)
                    .font(.system(size: 24))
                    .fontWeight(.bold)
                    .foregroundColor(.white)
                Text(item.colorRGBName)
                    .font(.system(size: 17))
                    .fontWeight(.bold)
                    .foregroundColor(.white)
            }
        }
    }
}
.tabViewStyle(PageTabViewStyle())
.edgesIgnoringSafeArea(.all)
复制代码

项目展示

image.png

本章代码

import SwiftUI
struct ContentView: View {
    var body: some View {
        TabView {
            ForEach(models) { item in
                ZStack {
                    item.color.edgesIgnoringSafeArea(.all)
                    VStack(alignment: .center, spacing: 20) {
                        Text(item.colorName)
                            .font(.system(size: 28))
                            .fontWeight(.bold)
                            .foregroundColor(.white)
                        Text(item.colorRGBName)
                            .font(.system(size: 17))
                            .fontWeight(.bold)
                            .foregroundColor(.white)
                    }
                }
            }
        }
        .tabViewStyle(PageTabViewStyle())
        .edgesIgnoringSafeArea(.all)
    }
}
struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
struct Model: Identifiable {
    var id = UUID()
    var colorName: String
    var color: Color
    var colorRGBName: String
}
var models = [
    Model(colorName: "草莓红", color: Color(red: 228 / 255, green: 45 / 255, blue: 68 / 255), colorRGBName: "#E42D44"),
    Model(colorName: "奶油白", color: Color(red: 250 / 255, green: 239 / 255, blue: 222 / 255), colorRGBName: "#FAEFDE"),
    Model(colorName: "泥猴桃绿", color: Color(red: 123 / 255, green: 173 / 255, blue: 95 / 255), colorRGBName: "#7BAD5F"),
    Model(colorName: "小麦黄", color: Color(red: 229 / 255, green: 215 / 255, blue: 173 / 255), colorRGBName: "#E5D7AD"),
    Model(colorName: "板栗灰", color: Color(red: 97 / 255, green: 79 / 255, blue: 77 / 255), colorRGBName: "#614F4D"),
    Model(colorName: "柠檬黄", color: Color(red: 255 / 255, green: 216 / 255, blue: 0 / 255), colorRGBName: "#FFD800"),
    Model(colorName: "葡萄紫", color: Color(red: 91 / 255, green: 52 / 255, blue: 99 / 255), colorRGBName: "#5B3663"),
    Model(colorName: "青豆绿", color: Color(red: 188 / 255, green: 207 / 255, blue: 144 / 255), colorRGBName: "#BCCF90"),
    Model(colorName: "水蜜桃粉", color: Color(red: 246 / 255, green: 160 / 255, blue: 154 / 255), colorRGBName: "#F6A09A"),
]
复制代码

恭喜你,完成了整个项目的全部内容!

快来动手试试吧。

相关文章
|
安全 开发者
SwiftUI极简教程02:Image图片的使用
SwiftUI极简教程02:Image图片的使用
1819 1
SwiftUI极简教程02:Image图片的使用
|
缓存 图形学
游戏通用解决方案之红点设计
游戏通用解决方案之红点设计
1301 0
|
4月前
|
SQL 容灾 Nacos
Seata的部署和集成
本文介绍Seata分布式事务的部署与微服务集成全过程。包含TC服务搭建、Nacos配置中心对接、数据库表初始化、高可用集群部署及微服务整合步骤,实现事务组映射动态管理,支持异地容灾与集群切换,提升系统稳定性与可维护性。(239字)
|
虚拟化 Windows
Windows 11 24H2 中文版、英文版 (x64、ARM64) 下载 (2025 年 3 月更新)
Windows 11 24H2 中文版、英文版 (x64、ARM64) 下载 (2025 年 3 月更新)
607 3
Windows 11 24H2 中文版、英文版 (x64、ARM64) 下载 (2025 年 3 月更新)
|
6月前
|
网络协议 Linux 虚拟化
配置VM网络:如何设定静态IP以访问主机IP和互联网
以上就是设定虚拟机网络和静态IP地址的基本步骤。需要注意的是,这些步骤可能会因为虚拟机软件、操作系统以及网络环境的不同而有所差异。在进行设定时,应根据具体情况进行调整。
514 10
|
10月前
陌陌自动发布动态脚本,批量群发私信打招呼插件,附近人动态自动点赞工具
这是一款针对陌陌平台开发的自动化营销工具源码,适用于保健品、洗浴按摩等项目的推广。通过模拟点击、点赞、私信等功能
|
存储 安全 容灾
云备份:数据安全的新纪元与未来展望
通过严格的访问控制机制,限制对备份数据的访问权限。只有经过授权的用户才能访问备份数据,防止数据泄露和非法访问。 备份验证:定期对备份数据进行验证和测试,确保备份数据的完整性和可用性。在发现备份数据存在问题时,及时进行处理和修复。 容灾备份:在云计算平台上
|
运维 Linux Docker
Docker Hub 镜像拉取超时:1Panel面板中应用安装失败的临时解决方案
`1Panel` 是一款Linux服务器管理面板,提供图形化界面便于运维。若在安装应用时遇到问题,可以尝试使用Docker加速地址 <https://docker.1panel.live/>,但请注意该地址可能不稳定且仅限境内使用。首届 `1Panel` 运维节将在2024年7月24日举行,更多信息可访问官方链接。
9292 2
Docker Hub 镜像拉取超时:1Panel面板中应用安装失败的临时解决方案
|
人工智能 运维 Serverless
零门槛体验DeepSeek-R1满血版评测
本文评测了“零门槛、轻松部署您的专属DeepSeek模型”解决方案。文档步骤清晰,逻辑顺畅,特别在调用API和配置客户端方面指引详细,确保部署顺利。体验过程中提供了充足引导与帮助,涵盖多种部署方式如百炼API调用、PAI平台部署等,适合不同需求用户。推荐基于百炼API的满血版,因其快速上手、按量付费、弹性扩展和易于管理的优势。整体方案基本满足实际需求,建议进一步补充性能评估和成本优化等内容。
561 18
|
SQL JavaScript 数据库
后端 (4)
后端 (4)
686 0