SwiftUI图形形状Shape
SwiftUI图形形状Shape

SwiftUI图形形状Shape

在SwiftUI 中Shape是非常重要且核心的协议,常用于创建简单的几何图形,可以应用到界面设计、动画和遮罩中。SwiftUI 提供了多种内置形状,并允许自定义自己的形状。

什么是 Shape?

Shape 是一个协议,代表一个可绘制的二维图形。

通过实现 Shape 协议的唯一要求方法 path(in:),返回一个 Path,来定义图形的轮廓。

Shape 自身只定义形状,不包含颜色、填充、描边等样式,这些通过调用 .fill(), .stroke() 等修饰符来添加。

Shape协议定义

protocol Shape: View {
    func path(in rect: CGRect) -> Path
}

path(in rect: CGRect) -> Path:需要实现该方法,返回你想绘制的路径,路径会被限制在传入的 rect 里。

使用示例

1、自定义圆形Shape

struct MyCircle: Shape {
    func path(in rect: CGRect) -> Path {
        return Path(ellipseIn: rect)
    }
}

使用并设置填充颜色:

MyCircle()
    .fill(Color.red)
    .frame(width: 100, height: 100)

设置描边:

MyCircle()
    .stroke(Color.blue, lineWidth: 3)
    .frame(width: 100, height: 100)

2、三角形

struct Triangle: Shape {
    func path(in rect: CGRect) -> Path {
        Path { path in
            path.move(to: CGPoint(x: rect.midX, y: rect.minY)) // 顶点
            path.addLine(to: CGPoint(x: rect.minX, y: rect.maxY)) // 左下角
            path.addLine(to: CGPoint(x: rect.maxX, y: rect.maxY)) // 右下角
            path.closeSubpath() // 闭合路径
        }
    }
}

设置描边:

Triangle()
    .stroke(Color.blue, lineWidth: 2)
    .frame(width: 100, height: 100)

SwiftUI 常用的Shape

以下是 SwiftUI 中常用的Shape及其用途:

1、Circle:圆形,半径由父视图的大小决定。

2、Ellipse:椭圆,长宽比由父视图的大小决定。

3、Rectangle:矩形,边长由父视图的大小决定。

4、RoundedRectangle:圆角矩形,支持设置圆角半径。

5、Capsule:胶囊形状,是圆角矩形的特例,长宽比决定形状。

6、Path:自定义路径,支持绘制复杂图形(如多边形、曲线等)。

7、PolygonShape:多边形,可以自定义边的数量(需要第三方库或手动实现)。

8、Line :线条(通常需要结合 Path 实现)。

9、Arc:弧形,可以通过自定义角度绘制(需要结合 Path 实现)。

10、Star:星形,需要自定义实现。

11、Triangle:三角形(需要自定义实现或使用 Path)。

常用Shape示例

1、Circle(圆形)

Circle()
    .fill(Color.red) // 填充颜色
    .frame(width: 100, height: 100) // 设置大小

2、Rectangle(矩形)

Rectangle()
    .fill(Color.green)
    .frame(width: 100, height: 50)

3、RoundedRectangle(圆角矩形)

RoundedRectangle(cornerRadius: 20)
    .stroke(Color.blue, lineWidth: 2) // 边框颜色
    .frame(width: 100, height: 50)

4、Capsule(胶囊形状)

Capsule()
    .fill(Color.orange)
    .frame(width: 150, height: 50)

5、Ellipse(椭圆)

Ellipse()
    .fill(Color.purple)
    .frame(width: 120, height: 80)

结合形状的修饰符

形状可以与修饰符一起使用,增加灵活性:

1、fill():填充颜色。

2、stroke(lineWidth:):设置边框。

3、clipShape():使用形状作为遮罩。

4、overlay():在形状上添加叠加内容。

5、trim(from:to:):显示形状的一部分。

总结

Shape协议,通过实现path(in:)方法返回路径。

可以使用fill()、stroke()等修饰符控制颜色、边框。

相关文章

SwiftUI绘制圆弧路径的trim()修饰符:https://fangjunyu.com/2025/02/24/swiftui%e7%bb%98%e5%88%b6%e5%9c%86%e5%bc%a7%e8%b7%af%e5%be%84%e7%9a%84trim%e4%bf%ae%e9%a5%b0%e7%ac%a6/

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注