使用 SwiftUI 布局协议构建六边形网格,如何制作在六边形网格中显示子视图的通用 SwiftUI 容器

news2024/12/23 7:19:56

在这里插入图片描述
我们将要制作的组件可以作为Swift 包使用。

SwiftUI 非常擅长构建矩形框架的层次结构。随着最近的加入,Grid它变得更好了。然而,今天我们要构建一个疯狂的六边形布局。当然,没有专门的布局类型。所以我们用协议建立我们自己的Layout!

绘制一个六边形

让我们首先为我们的网格单元定义一个形状。为此,我们需要实施func path(in rect: CGRect) -> Path以满足Shape协议要求。我们基本上需要找到适合矩形内部的六边形的最大尺寸,计算它的顶点并在它们之间画线。这是制作平顶六边形的完整代码。

struct Hexagon: Shape {
    static let aspectRatio: CGFloat = 2 / sqrt(3)

    func path(in rect: CGRect) -> Path {
        var path = Path()

        let center = CGPoint(x: rect.midX, y: rect.midY)
        let width = min(rect.width, rect.height * Self.aspectRatio)
        let size = width / 2
        let corners = (0..<6)
            .map {
                let angle = -CGFloat.pi / 3 * CGFloat($0)
                let dx = size * cos(angle)
                let dy = size * sin(angle)

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

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

相关文章

在linux中配置redis去中心化集群

目录 前情回顾 一、集群配置 二、启动redis集群 三、检验是否成功 成功&#xff01; 前情回顾 linux中配置redis主从复制及开启哨兵模式 一、集群配置 查看所有的redis服务进程 ps -ef | grep redis 关闭所有的redis服务&#xff08;6379,6380,6381) kill -9 99168 kill …

第十章:数据库恢复技术

1、【多选题】下列哪些属于事务的特征&#xff1a; 正确答案&#xff1a; AD 2、【多选题】下列关于故障恢复的说法正确的是&#xff1a; 正确答案&#xff1a; BC 3、【多选题】下列说法错误的是&#xff1a; 正确答案&#xff1a; AB

无线通信网络优化的自动路测系统设计(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 无线通信网络是一个动态的网络&#xff0c;无线网络优化是一项贯穿于整个网络发展全过程的长期工程。在网络建成投入运营以后,…

学习笔记 - Word、WPS分别设置背景色

学习笔记 - Word、WPS分别设置背景色前言实现原理实现步骤模拟背景色1. 插入矩形形状2. 调整矩形&#xff1a;位置、文字环绕、大小。3. 调整颜色实现按节分别设置1. 插入分节符2. 取消“同前节”3. 矩形入进页眉建议场景参考资料前言 Word、WPS 都没有自带此功能。只能统一设…

node.js+uni计算机毕设项目基于微信小程序的校园快递代取平台(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等…

第十一章:并发控制

1、【多选题】二级封锁协议能够避免数据库哪些一致性问题 正确答案&#xff1a; AB 2、【多选题】下列说法正确的是&#xff1a; 正确答案&#xff1a; ABC 3、【多选题】下列哪些是解决死锁的方法&#xff1a; 正确答案&#xff1a; ABC

node.js+uni计算机毕设项目互联网教育系统小程序(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等…

k8s-dashboard布署

k8s-dashboard布署Kubernetes dashboard作用获取Kubernetes dashboard资源清单文件修改并部署kubernetes dashboard资源清单文件访问Kubernetes dashboardKubernetes dashboard作用 通过dashboard能够直观了解Kubernetes集群中运行的资源对象通过dashboard可以直接管理&#x…

标准的晋升 PPT 长什么样子?互联网职场晋升内幕!想升职加薪?得这么干……...

如果你真的想顺利地升职加薪&#xff0c;就得从现在开始&#xff0c;重新系统地理解晋升到底是怎么回事。面评技巧导学你可能会认为&#xff0c; “是金子总会发光的”&#xff0c;只要自己能力达到了&#xff0c; 晋升就是“水到 渠成”的事情。毕竟评委的眼睛都是雪亮的&am…

node中,path.join和path.resolve的区别

1. path.join和path.resolve的区别 path.join 拼接路径能够识别 \ path.resolve 从当前的执行路径&#xff0c;解析出绝对路径不能识别 \ &#xff0c;会被当成根路径 注意下面的例子&#xff0c;是从当前的执行路径&#xff0c;解析出绝对路径 使用 process.cwd() 可以获取…

2023年中国博士后科学基金资助指南发布

今日&#xff0c;博管会发布了2023年中国博士后科学基金资助指南&#xff0c;内容上有较大的变化&#xff1a;1.面上资助不再分设一等、二等资助&#xff0c;资助标准统一调整为自然科学资助标准8万元&#xff0c;社会科学资助标准5万元&#xff1b;2.申请人申报周期从2个月调整…

AiFlow大数据框架应用简介

文章大纲1. 平台定位2. 平台特点一站建模智能分析交互分析通用部署3. 项目案例ETL 过程样例物料分类业务规则建模合作1. 平台定位 数据挖掘平台在此起到数据运营的承上启下的环节&#xff0c;主要负责数据的挖掘分析、ETL、数据检测。 平台支持自动建模、可视化交互建模、嵌入…

JavaScript:队列的封装及面试题击鼓传花队列方法实现案例

队列的定义&#xff1a;队列简称队。是一种操作受限的线性表&#xff0c;只允许在表的一端进行插入&#xff0c;而在表的另一端进行删除。向队列中插入元素称为入队或进队&#xff1b;删除元素称为出队或离队。其操作特性为先进先出&#xff08;First In First Out&#xff0c;…

【金猿人物展】天云数据雷涛:从数据湖到湖仓一体再到数据编织,完成的是燃油车到油电混再到纯电技术的改造...

‍雷涛本文由天云数据CEO雷涛撰写并投递参与“数据猿年度金猿策划活动——2022大数据产业趋势人物榜单及奖项”评选。‍数据智能产业创新服务媒体——聚焦数智 改变商业这一两年&#xff0c;北美以Facebook、谷歌为驱动的存算分离的虚拟数仓架构&#xff0c;正在非常快速的洗牌…

【408篇】C语言笔记-第十七章(考研必会的排序算法(下))

文章目录第一节&#xff1a;选择排序1. 选择排序原理解析2. 选择排序代码实战3. 时间复杂度与空间复杂度第二节&#xff1a;堆排序1. 堆排序原理解析2. 堆排序代码实战3. 时间复杂度与空间复杂度第三节&#xff1a;归并排序1. 归并排序原理解析2. 归并排序代码实战3. 时间复杂度…

5、前端笔记-JS-运算符

运算符也被称为操作符&#xff0c;用于实现赋值、比较和执行算数运算等功能的符号 常用的运算符&#xff1a; 算数运算符、递增和递减运算符、比较运算符、逻辑运算符、赋值运算符 1、算术运算符 -*/% - * / %&#xff08;1&#xff09;%取余可以用来判断一个数是否可以被整除…

家政清洁服务系统设计与实现

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 修改意见&#xff1a;题目改为“家政清洁服务系统设计与实现” 提供服务&#xff1a;钟点打扫卫生&#xff08;按小时收…

node.js+uni计算机毕设项目基于微信平台的大学生时间规划管理小程序设计(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等…

二次封装a-upload组件,自定义上传预览

a-upload封装效果自定义上传customRequesttransformFile上传前修改文件流自定义预览调整props和a-uoload一致install封装vue组件结束效果 编辑 预览 不展示删除和上传 空数据 自定义图片样式 自定义上传customRequest 入参是本地上传的文件流 async customRequest(file) …

Java笔记之线程池详解

文章目录一、线程池是什么&#xff1f;二、为什么要使用线程池&#xff1f;三、jdk自带的四种线程池1. 线程池参数2.工作队列3.拒绝策略4.四种线程池一些示例四、自定义线程池一、线程池是什么&#xff1f; 一种线程使用模式&#xff0c;是一种多线程处理形式&#xff0c;处理…