SwiftUI中的常用图形(Shapes)

news2024/11/18 8:24:19

概述

SwiftUI中,常用的图形(Shape)主要有:
Circle:圆形
Ellipse:椭圆形
Capsule:胶囊形
Rectangle:矩形
RoundedRectangle:圆角矩形
上面的这些图形都继承了Shape协议,除了上面给出的图形,也可以通过path方法自定义图形。

func path(in rect: CGRect) -> Path

上述图形中,他们不像Text或者Button这类组件是根据自身内容自适应frame的,而是默认填充其父视图的大小,除非指定frame。

修饰器(modifier)

通过修饰器,可以设置图形的各种属性,包括颜色,边框,大小,等等。

1. 填充颜色
填充颜色即设置图形的颜色,可以通过下面两个方法设置:
.fill()
.foregroundColor()
两个方法中可以直接颜色参数,比如:
.fill(Color.red)
.foregroundColor(.blue)

除了设置具体的颜色,还可以设置渐变色,比如:
.fill(LinearGradient(colors: [Color.red, Color.blue], startPoint: .top, endPoint: .bottom))
.foregroundColor(LinearGradient(colors: [Color.red, Color.blue], startPoint: .top, endPoint: .bottom))

.fill()方法中还可以添加一个style参数,比如:.fill(Color.red, style: FillStyle(eoFill: true, antialiased: false))
FillStyle结构体中的isEOFilledisAntialiased是两个属性,用于控制填充的行为和渲染效果。

在这里插入图片描述

2. 边框
设置边框最直接的方法:.stroke(),如果不设置任何参数,则取默认的颜色,黑色或者白色。
通常可以设置的参数如下:
.stroke(Color.red)
.stroke(Color.blue, lineWidth: 10.0)
.stroke(Color.blue, style: StrokeStyle(lineWidth: 10, lineCap: .round, dash: [40]))
在这里插入图片描述
通过StrokeStyle,我们可以设置出一个虚线边框。

3. 裁剪
通过.trim方法可以对图形进行裁剪。比如:
.trim(from: 0.5, to: 1)
.trim(from: 0, to: 0.5)
.trim(from: 0.25, to: 0.75)
.trim(from: 0.3, to: 1.0)

参数:
from:绘制图形时的起始部分。
to:绘制图形时的结束部分。
通过使用trim方法,我们可以在SwiftUI中轻松地裁剪形状的一部分,实现更加灵活和多样化的视觉效果。
在这里插入图片描述

写在最后

上面是用圆形做了一些基本修饰器的举例,除了这些,个别图形在创建的时候也有自己的独有的属性,比如创建RoundedRectangle的时候,需要给定cornerRadius。还有CapsuleRoundedRectangle创建的时候也可以设置style属性。
很多的时候这些形状可以作为文字或者按钮的背景存在,以实现更好的效果。

var body: some View {
    VStack(spacing: 20) {
      Circle()
        .fill(Color.red)
      Ellipse()
        .fill(LinearGradient(colors: [Color.red, Color.blue], startPoint: .top, endPoint: .bottom))
      Capsule(style: .circular)
        .foregroundColor(.blue)
      Rectangle()
        .stroke(Color.blue, lineWidth: 10.0)
      RoundedRectangle(cornerRadius: 25.0, style: RoundedCornerStyle.continuous)
        .stroke(Color.blue, style: StrokeStyle(lineWidth: 20, lineCap: .round, dash: [40]))
    }
    .padding()
  }

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1675947.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ssl证书免费申请指南

同学们可以私信我加入学习群! 正文开始 前言一、购买证书二、创建证书三、 验证证书等待出现如下页面,说明申请成功: ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/6b6c1dd11d4c467687318552da7cdbb2.png) 总结 前言 今天为大…

28、查看Qt源码

一、方法1 在安装Qt时,需要勾选“Sources” 在Qt的安装目录Qt5.12.10\5.12.10\Src中可以找到Qt的源码 二、方法2 访问如下网址(需要翻墙) https://codebrowser.dev/ 在搜索框中输入要查找的信息,如:QMainWindow&…

C++自定义日期类的精彩之旅(详解)

在学习了C的6个默认成员函数后,我们现在动手实现一个完整的日期类,来加强对这6个默认成员函数的认识。 这是日期类中所包含的成员函数和成员变量: 构造函数 // 函数:获取某年某月的天数 inline int GetMonthDay(int yea…

嵌入式学习-M4的基本定时器

基本介绍 框图分析 时钟选择 计数器结构 开启重装载值寄存器的影子寄存器的工作时序图 未开启重装载值寄存器的影子寄存器的工作时序图 更新事件以及中断 相关寄存器 相关库函数

原子学习笔记7——FrameBuffer 应用编程

Frame 是帧的意思,buffer 是缓冲的意思,所以 Framebuffer 就是帧缓冲,这意味着 Framebuffer 就是一块内存,里面保存着一帧图像。 应用程序通过对 LCD 设备节点/dev/fb0(假设 LCD 对应的设备节点是/dev/fb0)…

Optional用法

说明:Optional和Stream一样,是Java8引入的特性,本文介绍Optional的几个实际用法。Steam流使用,参考下面这篇文章: Stream流使用 使用 1.保证值存在 // 1.保证值存在,pageNumber,pageSizeInte…

Zab之光:照亮分布式系统数据一致性迷宫的智慧火把

关注微信公众号 “程序员小胖” 每日技术干货,第一时间送达! 引言 在构建大型分布式系统时,数据一致性是我们必须面对的挑战之一。随着业务的增长和系统规模的扩大,如何保证在多个节点间复制的数据保持一致,成为了一…

iOS--底层学习--GCD的简单认识

iOS--底层学习--GCD的简单认识 前言什么是GCDGCD的优点GCD中的任务和队列任务队列 GCD的使用队列的创建和获取任务的创建队列嵌套任务和队列中的一些要点 GCD线程间的通信从后台线程切换到主线程通过队列传递数据使用Dispatch Group进行线程间协调 GCD的方法dispatch_barrier_a…

其它高阶数据结构①_并查集(概念+代码+两道OJ)

目录 1. 并查集的概念 2. 并查集的实现 3. 并查集的应用 3.1 力扣LCR 116. 省份数量 解析代码1 解析代码2 3.2 力扣990. 等式方程的可满足性 解析代码 本篇完。 写在前面: 此高阶数据结构系列,虽然放在⑤数据结构与算法专栏,但还是作…

Output directory is not specified

场景:从GitHub拉取Java项目使用IDEA打开运行的时候抛出 java: 写入com.common.exception.ChatException时出错: Output directory is not specified网上大部分是说在项目结构增加编译器输出路径,但我在实际开发的项目的时候这里为空,包括我加…

IDEA找不到database图标的解决方法

首先右边侧边栏和左边的侧边栏都看一下,确认没有数据库图标以后再参考下面方法。 第一步,打开设置,在插件里搜索database 第二步 安装好,点击确定 返回主页面,左边的侧边栏会出现database图标,点击号就可以…

19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode)

基础知识要求: Java:方法、while循环、for循环 Python: 方法、while循环、for循环 题目: 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head […

【C/C++笔试练习】DNS劫持、三次握手、TCP协议、HTTPS、四次挥手、HTTP报文、拥塞窗口、POP3协议、UDP协议、收件人列表、养兔子

文章目录 C/C笔试练习选择部分(1)DNS劫持(2)三次握手(3)TCP协议(4)HTTPS(5)四次挥手(6)HTTP报文(7)拥塞窗口&a…

宿舍管理系统代码详解(主页面)

本篇将对管理系统的主页面的代码进行详细的介绍。 目录 一、主页面前端代码 1.样式展示 2.代码详解 (1)template部分 (2)script部分 (3)路由导航守卫 (4)在vue中引用vue 一、主页…

富唯智能复合机器人:CNC铝块上下料安全新标准

在CNC铝块加工过程中,上下料环节的安全问题一直是企业关注的焦点。富唯智能复合机器人的应用,为这一环节树立了新的安全标准。 传统的上下料方式往往依赖于人工操作,存在着较大的安全隐患。而富唯智能复合机器人采用先进的视觉识别技术和精准…

Charger之二输入电压动态电源原理(VIN-DPM)

主要内容 Charger的VIN-DPM 前篇内容:电池管理IC(Charger)了解一下? 领资料:点下方↓名片关注回复:粉丝群 正文 一、 VIN-DPM概念 VIN-DPM是指输入电压动态电源管理(Input voltage dynamic…

全栈开发之路——前端篇(9)插槽、常用api和全局api

全栈开发一条龙——前端篇 第一篇:框架确定、ide设置与项目创建 第二篇:介绍项目文件意义、组件结构与导入以及setup的引入。 第三篇:setup语法,设置响应式数据。 第四篇:数据绑定、计算属性和watch监视 第五篇 : 组件…

OpenAI 把超强AI带进日常,GPT-4o 让机器也懂情感!

一、前言 ⭐⭐ 立即体验:GPT-4o OpenAI 在春季发布会上推出了名为 GPT-4o 的旗舰级生成式人工智能模型,这一模型的发布不仅标志着技术的巨大飞跃,更预示着人机交互方式的全面革新。"o" 在 GPT-4o 中代表 "omni"&#xf…

Codeforces Round 944 (Div. 4)(A,B,C,D,E,F,G,H)

比赛链接 这场不难, G G G 和 H H H 比较有意思。 G G G 题需要一定的二进制和数据结构的知识, H H H 题是个 2 − s a t 2-sat 2−sat 的题,算法名字吓人但是其实很简单,题目本身也很板,建议趁机学习一波。 A. My …

vue获取路由的值

1,此方法获取到请求地址后面的值 如 /name123&age12 2,此方法获取到请地址?后面的值 例如?name123&age12 二者的区别,第一个是直接在路径后面拼接,第二种就是正规的http请求。 路径带?号的