Skip to content

绘制徽章背景

用 SwiftUI 中的图形 API 绘制自定义的徽章形状。

第 1 步

打开 File > New > FileViews 目录创建一个新文件,这次从 iOS 模板表中选择 SwiftUI View。点击 Next,然后将文件命名为 BadgeBackground.swift

第 2 步

BadgeBackground.swift 文件中,为徽章添加一个 Path 形状,并用 fill() 修饰符填充该形状。

我们可以使用路径组合直线、曲线和其他绘图单元来形成更复杂的形状,比如这里徽章的六边形背景。

注意

.fill(.black) 如果报错,请使用 .fill(style: FillStyle())

第 3 步

在路径上添加一个起点,假设是一个大小为 100 x 100 px 的容器。

move(to:) 方法把绘制光标移动到一个形状的边上,就像钢笔或铅笔悬停在该位置,等待开始绘制。

第 4 步

绘制形状数据中的每一个点,创建一个大致的六边形形状。

addLine(to:) 方法从一个点开始绘制。连续调用 addLine(to:) 方法从上一个点开始绘制线条,并继续画到新的点。

现在我们的六角形看起来不对劲,但这是正常的。在接下来的几个步骤中,我们会让六边形看起来更像本开文头所示的徽章形状。

第 5 步

使用 addQuadCurve(to:control:) 方法来给徽章的角绘制贝塞尔曲线。

第 6 步

把徽章的形状包装在一个 GeometryReader 中,这样徽章就不会用硬编码的大小(100),而是使用其所包含视图的大小。

当包含徽章的视图不是正方形时,使用最小的几何二维可以保留徽章的长宽比。

第 7 步

使用 xScalexOffset 调整变量将徽章置于其几何体中心。

第 8 步

根据设计稿要求,把徽章背景的纯黑色改成渐变色。

注意

如果渐变代码报错,请使用:.fill(LinearGradient( gradient: Gradient(colors: [Self.gradientStart, Self.gradientEnd]), startPoint: UnitPoint(x: 0.5, y: 0), endPoint: UnitPoint(x: 0.5, y: 0.6) ))

第 9 步

aspectRatio(_:contentMode:) 修饰符添加到图形上。

即使徽章的父项不是正方形,也可以通过保持 1:1 的宽高比,让徽章处于视图中心的位置。

绘制徽章背景 has loaded