当前位置: 首页 > news >正文

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中的渐变、实心形状和视图背景的基础用法&#xff…...

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-…...

iPhone当U盘使用的方法 - iTunes共享文件夹无法复制到电脑怎么办 - 如何100%写入读出

效果图 从iPhone复制文件夹到windows电脑 步骤windows 打开iTunes通过USB连接iPhone和电脑手机允许授权iTunes中点击手机图标,进入到点击左边“文件共享”,在右边随便选择一个App(随意...)写入U盘:拖动电脑的文件&am…...

jenkins ssh 免密报错Host key verification failed.

jenkins 发布项目,ssh连接远程服务器时报错:Host key verification failed. 解决: 原因是生成的sshkey不是用的jenkins用户,所以切换用户到:jenkins重新生成sshkey su jenkins ssh-keygen -t rsa ssh-copy-id -i ~/…...

智能科学与技术(一级学科)介绍

智能科学与技术:探索智能的边界与未来 智能科学与技术的起源与发展学科定位与内涵学科范围与研究方向培养目标相关学科 在当今这个信息爆炸的时代,人工智能(AI)已经成为科技创新的重要驱动力。随着技术的不断进步,智能…...

iOS调试真机出现的 “__llvm_profile_initialize“ 错误

一、错误形式&#xff1a; app启动就崩溃&#xff0c;如下&#xff1a; Demo__llvm_profile_initialize:0x1045f7ab0 <0>: stp x20, x19, [sp, #-0x20]!0x1045f7ab4 <4>: stp x29, x30, [sp, #0x10]0x1045f7ab8 <8>: add x29, sp, #0x100x1…...

Android SELinux——neverallow问题处理(十六)

上一篇我们介绍了通过添加允许策略处理问题,这里我们主要来看一些 neverallow 策略问题该怎么处理。 一、neverallow介绍 遇到 neverallow 规则问题,千万别急着去注释/剔除里面原有的规则(原生的尽量别动)。增加 allow 规则是常见的解决办法,但是随着 android 版本的升级…...

Vue 关于路由

关于路由 路由的模式与区别 路由的两种模式&#xff1a; hashhistory 区别&#xff1a; 表象不同 hash 模式中&#xff0c;在地址里以 /#/ 分隔&#xff1b;history 模式中&#xff0c;地址里以 / 分隔。关于找不到当前页面发送请求的问题 history 模式会给后端发送一次请…...

香港海洋投资启动创新海洋牧场,领航全球海洋经济

香港&#xff0c;这座国际大都市&#xff0c;以其独特的地理位置和深厚的海洋文化底蕴&#xff0c;再次站在了全球海洋经济发展的前沿。近日&#xff0c;香港海洋投资发展有限公司&#xff08;以下简称“香港海洋投资”&#xff09;在万众瞩目中&#xff0c;正式宣布启动其创新…...

C/C++ 每日一练:二分查找

二分查找是一种高效的查找算法&#xff0c;用于在有序数组中定位目标元素的位置。它的核心思想是每次查找时将范围缩小一半。 题目要求 实现一个二分查找算法。给定一个递增排序的整型数组 arr 和一个目标值 target&#xff0c;编写一个函数 binarySearch&#xff0c;若 targe…...

Linux基础IO--重定向--缓冲区

1&#xff0c;为什么语言喜欢做封装&#xff1f; 我们先知道一个概念&#xff0c;显示器叫做字符设备&#xff0c;根据ACSLL码来打印数据&#xff0c;所以我们从键盘输入的 1234&#xff0c;在显示器看来就是一个一个的字符(1,2,3,4)而不是一千两百三十四: 下图输入字符类型数…...

Conda 安装与使用指南

Conda 是一个开源的软件包管理和环境管理系统&#xff0c;主要解决一个系统上同时要使用python2&#xff0c;python3等等多个python环境的切换问题&#xff0c;支持多种编程语言&#xff08;如 Python、R 等&#xff09;&#xff0c;可以在 Windows、macOS 和 Linux 上运行。它…...

没有备案的网站怎么访问不了/成人短期就业培训班

21日&#xff0c;以“向未来出发”为主题的秋季运动会在童心小学举行。现场&#xff0c;很多小朋友利用纸箱、报纸等废旧材料&#xff0c;每个人都制作了一身特别的时装&#xff0c;有的像机器人&#xff0c;有的像公主&#xff0c;有的像国王&#xff0c;引得全场观众热烈欢呼…...

双流规划建设管理局网站/爱站网关键词查询网站的工具

一、 数据库的导出(expdp)1.创建默认导出目录SQL>create directory [dirname] as ‘[dirpath]’;2.赋予指定用户在此目录的读写权限SQL>GRANT READ, WRITE ON DIRECTORY [dirname] to [dbuser];3.使用expdp导出数据库① 导出完整schema> expdp [username/passwd]DUMPF…...

丽水微信网站建设公司/西地那非片的功效与作用

首先&#xff0c;从电子学上来说&#xff0c;负载是相对电源来说的&#xff0c;电源是电能供给者&#xff0c;负载是电能的消耗者&#xff0c;负载就是给电源制造负担的实体&#xff0c;电子负载就相当于一个可调电阻。直流电子负载可以具备恒定电流、恒定电阻、恒定电压、动态…...

拖拽建站平台/什么平台可以免费打广告

七、招生问答1、上课时间怎么安排&#xff1f;答&#xff1a;因为我们是一对一上课。所以&#xff0c;上课时间是由您自己来安排&#xff0c;您什么有空&#xff0c;就什么时候来学习。2、我很笨&#xff0c;学不会怎么办&#xff1f;答&#xff1a;其实人与人之间&#xff0c;…...

评价淘宝网购物 经验和教训 对网站建设的建议和意见/百度热议

WebVies类介绍 [WebResourceRequest]添加于API21&#xff0c;封装了一个Web资源的请求信息&#xff0c;包含&#xff1a;请求地址&#xff0c;请求方法&#xff0c;请求头&#xff0c;是否主框架&#xff0c;是否用户点击&#xff0c;是否重定向- [WebResourceResponse]封装了…...

网站建设的相关技术/网络推广代理

我不是作者的程序P需要阅读F.我希望F的内容来自另一个’生成器’程序G,每当P试图读取F(将F作为普通文件)而不是之前的任何时候.我尝试过以下操作&#xff1a;$mkfifo /well-known/path/to/F # line #1$G > /well-known/path/to/F # line #2现在,当P启动并尝试读取F时,它似乎…...