示例程序
swift
struct ShapesBootcamp: View {
var body: some View {
RoundedRectangle(cornerRadius: 4)
.stroke(
Color.purple,
style: StrokeStyle(lineWidth: 4, dash: [10, 5])
)
.frame(width: 200, height: 100)
}
}
形状类型
| 类型 | 初始化 | 几何描述 |
|---|---|---|
Circle() |
无参 | 外接最小圆 |
Ellipse() |
无参 | 外接椭圆 |
Capsule(style:) |
.circular / .continuous |
两端半圆 |
Rectangle() |
无参 | 无圆角 |
RoundedRectangle(cornerRadius:style:) |
半径 + 风格 | 四角等半径 |
所有形状默认撑满父视图提案尺寸;使用 .frame() 可强制固定宽高。
视觉修饰符
| 修饰符 | 功能 | 示例 | 备注 |
|---|---|---|---|
.fill(_:) |
内部填充 | .fill(Color.blue) |
支持纯色、渐变 |
.stroke(_:lineWidth:) |
等宽描边 | .stroke(.red, lineWidth: 2) |
默认线帽 butt |
.stroke(_:style:) |
高级描边 | .stroke(.orange, style: StrokeStyle(...)) |
虚线、线帽、线连接 |
.trim(from:to:) |
路径裁剪 | .trim(from: 0.2, to: 0.8) |
0--1 比例 |
.frame(width:height:alignment:) |
固定尺寸 | .frame(200, 100) |
形状无固有尺寸 |
.scale(_:anchor:) |
缩放 | .scale(1.2) |
锚点默认 center |
.rotation(_:anchor:) |
旋转 | .rotation(.degrees(45)) |
同上 |
.offset(x:y:) |
平移 | .offset(x: 10) |
仅视觉偏移 |
.opacity(_:) |
透明度 | .opacity(0.5) |
0--1 |
.blendMode(_:) |
混合模式 | .blendMode(.multiply) |
需同级 ZStack |
.mask(_:) |
遮罩 | .mask(Circle()) |
支持任意 View |
.shadow(color:radius:x:y:) |
阴影 | .shadow(.black, 4, x: 2, y: 2) |
先阴影后形状 |
.accessibilityHidden(true) |
隐藏朗读 | 见上 | 纯装饰时推荐 |
任务速查表
| 需求 | 片段 |
|---|---|
| 圆角按钮背景 | RoundedRectangle(cornerRadius: 12).fill(.accent) |
| 环形进度 | Circle().trim(from: 0, to: progress).stroke(.blue, lineWidth: 4) |
| 虚线边框 | Rectangle().stroke(style: StrokeStyle(lineWidth: 1, dash: [5])) |
| 胶囊标签 | Capsule().fill(Color.gray.opacity(0.2)) |
性能与可访问性
- 矢量路径自动适配 @2x/@3x,无位图失真。
- 支持动态颜色与「降低透明度」辅助选项。
- 动画复杂时启用
.drawingGroup()以 Metal 合成,降低 CPU 负担。 - 纯装饰形状请附加
.accessibilityHidden(true),避免 VoiceOver 读出「图像」。