SwiftUI(三)- 渐变、实心形状和视图背景

引言
在现代的应用的UI设计中,渐变和形状背景为界面带来了丰富的层次与视觉效果,而SwiftUI提供了一系列简单且强大的API,可以轻松实现这些效果。在这篇文章中,我们将介绍SwiftUI中的渐变、实心形状和视图背景的基础用法,帮助你在项目中创建更具有吸引力的界面设计。无论是为按钮添加渐变,还是使用自定义形状构构建独特的背景,这些技巧的应用都能提升应用的视觉体验。接下来我们就开始一起探索这些SwiftUI的基本组件吧。
渲染渐变
在UIKit中并没有提供渐变的组件,我们通过使用渐变图层CAGradientLayer来构建渐变效果,这需要很多代码,而SwiftUI中就相对容易很多,它为我们提供了多种渐变选项。例如我们可以使用红色到绿色的线性渐变来渲染文本视图,如下所示:
Text("Hello world!").padding().foregroundStyle(.white).background(LinearGradient(gradient: Gradient(colors: [.red, .green]), startPoint: .leading, endPoint: .trailing))

颜色是一个数组,我们可以设置任意数量的颜色,默认情况下,SwiftUI会将它们均匀分配。比如我们设置从红色到绿色再到蓝色:
Text("Hello world!").padding().foregroundStyle(.white).background(LinearGradient(gradient: Gradient(colors: [.red, .green,.blue]), startPoint: .leading, endPoint: .trailing))

还可以进行垂直渐变,将.leading,.trailing改为.top和.bottom,以及.topLeading,.topTrailing等值进行倾斜的渐变:
Text("Hello world!").padding().foregroundStyle(.white).background(LinearGradient(gradient: Gradient(colors: [.red, .green,.blue]), startPoint: .top, endPoint: .bottom))

创建几何形状
在UIKit中通常我们只能创建长方形和正方形,而且其它的形状我们需要借助CALayer和变换来实现,SwiftUI想要使用简单的几何形状,我们同样也可以直接创建它们。
例如我们创建一个100*100的红色正方形,代码如下:
Rectangle().fill(Color.red).frame(width: 100, height: 100)

但是创建圆形,相对于UIKit,SwiftUI直接为我们提供了圆形形状:
Circle().fill(Color.blue).frame(width: 100, height: 100)

为视图创建背景
在UIKit中并没有直接为视图创建背景的方法,通常我们只可以为视图设置背景颜色,但是可以通过视图的层级结构来为视图添加背景视图。而在SwiftUI中设置背景图像和设置背景的方法都是使用background()修饰符,它除了颜色之外还可以指定背景图像,例如,创建一个大字体的文本视图,然后在后面放置一个300*300的logo图片:
Text("hello, world!").font(.largeTitle).background(Image("swift").resizable().frame(width: 300, height: 300))

事实上这一点UIKit通过设置CALayer的寄宿图也可以实现视图的图像背景,但在SwiftUI中视图的背景并不一定是图像,而是可以使用任何类型的视图做背景。比如我们在文字后面放置一个300*300的红色圆形:
Text("hello, world!").font(.largeTitle).background(Circle().fill(Color.red).frame(width: 200, height: 200))

再夸张一些我们甚至可以使用文本来作为文本的背景:
Text("hello, world!").font(.largeTitle).background(Text("hello, world!").font(.title).foregroundStyle(.red))

当然我们通常不会这样设置。
结语
通过这篇文章,我们了解了如何在 SwiftUI 中应用渐变、实心形状和背景视图,为界面设计增添更多可能性。这些基础组件不仅为 UI 带来了视觉层次感,也为开发者提供了更灵活的设计选择。掌握这些用法后,你可以根据项目需求灵活地运用它们,为应用界面注入独特的风格和个性化效果。希望这些基础技巧能为你的 SwiftUI 开发带来启发,创造出更具吸引力和表现力的用户界面。
相关文章:
SwiftUI(三)- 渐变、实心形状和视图背景
引言 在现代的应用的UI设计中,渐变和形状背景为界面带来了丰富的层次与视觉效果,而SwiftUI提供了一系列简单且强大的API,可以轻松实现这些效果。在这篇文章中,我们将介绍SwiftUI中的渐变、实心形状和视图背景的基础用法ÿ…...
RK3568-ota升级
ota升级 OTA(Over-the-Air)即空间下载技术。 OTA 升级是 Android 系统提供的标准软件升级方式。它功能强大,可以无损失升级系统,主要通过网络,例如 WIFI、3G/4G 自动下载 OTA 升级包、自动升级,也支持通过…...
GR-ConvNet代码详解
GR-ConvNet代码详解 文章目录 GR-ConvNet代码详解前言一、utils1.dataset_processing1.image.py1.Iamge类2.DepthImage类3.WidthImage类 2.grasp.py1. _gr_text_to_no()方法2.GraspRectangles类3.GraspRectangle类3.Grasp类4.detect_grasps方法 3.generate_cornell_depth.py4.e…...
Excel自带傅里叶分析数据处理——归一化处理
在Excel工具中,默认情况下数据处理---傅里叶分析通常不进行归一化处理,需要用户手动进行归一化处理。 (1)傅里叶变换的原理 傅里叶变换将时域信号转换为频域信号,输出的是复数形式的频率分量,包含了幅值和…...
Centos7.6版本安装mysql详细步骤
操作步骤: 1.下载Linux版本Mysql并上传至linux系统中 2.解压mysql并查询系统中是否有相关软件存在以及配置mysql,启动mysql tar -zxvf mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz tar -zxvf mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz rpm -qa|grep mysql ##查…...
寄宿学校:为自闭症儿童提供全面的教育和关爱
在这个多彩的世界里,每一个生命都值得被温柔以待,每一颗心灵都值得被悉心呵护。然而,自闭症儿童这一特殊群体,他们的世界却常常被误解和忽视。幸运的是,有一种教育模式——寄宿学校,正为这些孩子打开了一扇…...
LLaMA Factory环境配置
LLaMA-Factory官方文档 安装正确的torch和cuda版本 参考: PyTorch 报错解决 1.ImportError: /usr/lib/x86_64-linux-gnu/libstdc.so.6: version GLIBCXX_3.4.29 not found 参考这个解决:丝滑解决ImportError: /usr/lib/x86_64-linux-gnu/libstdc.s…...
STM32实现毫秒级时间同步
提起“时间同步”这个概念,大家可能很陌生。一时间搞不清楚是什么意思。 我理解“时间同步”可以解决多个传感器采集数据不同时的问题,让多个传感器同时采集数据。 打个比方。两个人走路,都是100毫秒走一步(频率相同是前提&…...
瑞吉外卖之com.fasterxml.jackson.dataformat.cbor.CBORFactor相关报错
1.报错:Error creating bean with name routerFunctionMapping defined in class path resource [com/itheima/reggie/config/WebMvcConfig.class]: Failed to instantiate [org.springframework.web.servlet.function.support.RouterFunctionMapping]: Factory met…...
CSS - grid制作表格
1. grid-template-columns:网格布局中的列的数量,也可以设置列的宽度 .grid-container {display: grid;grid-template-columns: 80px 200px auto 40px; }.grid-container {display: grid;grid-template-columns: auto auto auto auto;//表示所有列的宽度…...
【pip】 的换源(临时换源和永久换源)
【pip】 的换源(临时换源和永久换源) 一、临时换源二、永久换源三、Linux换源四、Windows换源 一、临时换源 临时换源只需要在pip安装包时,加上一个-i参数后接源的url即可: 临时换源: 清华源 pip3 install markdown…...
Kaggle 数据集dogs-vs-cats的错误
如果你想用kaggle数据集dogs-vs-cats做深度学习数据,可能会遇到数据bug,大概类似于下面的错误: UnidentifiedImageError: cannot identify image file 其原因不是你的程序有问题,而是数据集本身还有bug: cats/666.jpgdogs/11702.jpg 预览一下…...
【网络原理】网络地址转换----NAT技术详解
💐个人主页:初晴~ 📚相关专栏:计算机网络那些事 我们在 IP协议 一文中介绍过,由于IPv4协议中 IP地址只有32位,导致最多只能表示 42亿9千万个IP地址。但我们需要通过IP地址来标识网络上的每一个设备&#x…...
React怎么创建虚拟dom和挂载到页面
1、🍟你可以直接下载本节配套的资源代码,然后导入vscode看效果,也可以跟着教程一点一点敲,都是没问题的。 2、🤔怎么运行本节代码? 很简单,随便找个浏览器打开index.html即可。💕 代…...
kafka-console-ui的简介及安装使用
kafka-console-ui的简介及安装使用 一、kafka-console-ui的简介二、安装kafka-console-ui2.1 源码安装2.2 docker安装 三、kafka-console-ui功能使用3.1、功能特性3.2、 功能介绍3.2.1 集群3.2.2 topic3.2.3 消费组3.2.4 Acl3.2.5 运维 一、kafka-console-ui的简介 kafka-cons…...
git 的分支管理详解
Git 的分支管理是其强大功能之一,允许开发者在同一代码库中并行开发多个特性或修复 bug,而不干扰主分支的代码。下面是对 Git 分支管理的详解: 1. 查看分支 查看所有分支 git branch # 查看本地分支 git branch -r # 查看远程分支 git br…...
w003基于Springboot的图书个性化推荐系统的设计与实现
🙊作者简介:多年一线开发工作经验,原创团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹赠送计算机毕业设计600个选题excel文…...
医院信息化与智能化系统(6)
医院信息化与智能化系统(6) 这里只描述对应过程,和可能遇到的问题及解决办法以及对应的参考链接,并不会直接每一步详细配置 如果你想通过文字描述或代码画流程图,可以试试PlantUML,告诉GPT你的文件结构,让他给你对应的…...
前端学习---(6)js基础--4
Promise Promise 是异步编程的一种新的解决方案和规范。 Promise优点: 1、可以很好地解决ES5中的回调地狱的问题(避免了层层嵌套的回调函数)。 2、统一规范、语法简洁、可读性和和可维护性强。 3、Promise 对象提供了简洁的 API,使得管理异步…...
241026-RHEL如何以root身份卸载Docker
在 RHEL 8.8 中,以 root 身份卸载 Docker 可以通过以下步骤完成: 停止 Docker 服务(如果已启动): sudo systemctl stop docker删除 Docker 包: 运行以下命令卸载 Docker 引擎及其依赖包(docker-…...
跨平台模组获取:Steam创意工坊资源的多引擎下载方案
跨平台模组获取:Steam创意工坊资源的多引擎下载方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 诊断访问障碍:游戏模组获取的系统性问题分析 识别用…...
Lychee Rerank MM零基础上手:图文混合Query构建与Document批量上传实操
Lychee Rerank MM零基础上手:图文混合Query构建与Document批量上传实操 1. 什么是Lychee Rerank MM?——多模态重排序的“精准标尺” 你有没有遇到过这样的问题:在图片库中搜索“穿红裙子站在樱花树下的女孩”,返回结果里却混着…...
收藏!小白程序员也能轻松掌握大模型:VLLM入门指南与实战教程
收藏!小白程序员也能轻松掌握大模型:VLLM入门指南与实战教程 VLLM是由伯克利大学LMSYS组织开源的大语言模型高速推理框架,通过PagedAttention技术、连续批处理和优化CUDA内核,显著提升模型推理吞吐量和内存效率。本文详细介绍了VL…...
简单三步:用Qwen3语义雷达,为你的网站添加智能搜索功能
简单三步:用Qwen3语义雷达,为你的网站添加智能搜索功能 1. 为什么需要语义搜索? 传统的网站搜索功能大多基于关键词匹配,这种技术存在明显局限。当用户搜索"如何解决电脑卡顿"时,如果知识库中只有"提…...
仅限产线工程师获取:Python网关调试禁忌清单(含12个厂商文档刻意回避的硬件层坑点,第7条致90%项目延期)
第一章:Python网关调试的产线准入机制与权限边界在工业级Python网关部署场景中,产线准入并非简单验证服务可达性,而是融合身份认证、环境隔离、行为审计与动态策略执行的多维控制体系。所有调试接入请求必须通过统一API网关前置鉴权模块&…...
不止于采集:用BrainFlow解锁DeepBCI脑电信号的进阶玩法(特征提取与简单分类)
不止于采集:用BrainFlow解锁DeepBCI脑电信号的进阶玩法(特征提取与简单分类) 当你已经能够稳定采集到DeepBCI设备的脑电信号时,那些跳动的波形背后隐藏着怎样的秘密?本文将带你跨越数据采集的门槛,探索如何…...
计算机毕设 java 基于 Hadoop 平台的电影推荐系统 9java 基于 Hadoop 的智能电影个性化推荐系统 java 基于 Hadoop 平台的电影精准推荐平台
计算机毕设 java 基于 Hadoop 平台的电影推荐系统 541039(配套有源码 程序 mysql 数据库 论文)本套源码可以先看具体功能演示视频领取,文末有联 xi 可分享随着影视行业的快速发展和互联网视频平台的普及,海量电影资源让用户面临 “…...
解锁Zotero检索潜能:7个效率倍增实战技巧
解锁Zotero检索潜能:7个效率倍增实战技巧 【免费下载链接】zotero-engine-list 一份实用的 Zotero 检索引擎 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-engine-list 高效认知:Zotero检索引擎核心架构 检索引擎是Zotero实现学术资源发…...
Phi-3-vision-128k-instruct黑马点评项目AI升级:实现菜品图片智能识别与推荐
Phi-3-vision-128k-instruct黑马点评项目AI升级:实现菜品图片智能识别与推荐 1. 引言:餐饮应用的智能化痛点 在餐饮行业数字化浪潮中,"黑马点评"作为一款广受欢迎的美食点评应用,面临着用户需求升级的挑战。传统模式下…...
AV1编解码器实战:如何在Chrome 85+和Firefox 86中启用AVIF图片支持
AV1编解码器实战:如何在Chrome 85和Firefox 86中启用AVIF图片支持 AVIF(AV1 Image File Format)作为新一代图像格式,凭借AV1编解码器的强大压缩能力,正在逐步改变Web图像分发的格局。对于追求极致性能的前端开发者而言…...
