我们将要制作的组件可以作为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)