- 绘制等腰三角形代码实现:
import SwiftUI
struct IsoscelesTriangle: Shape {
func path(in rect: CGRect) -> Path {
var path = Path()
let top = CGPoint(x: rect.midX, y: rect.minY)
let leftBottom = CGPoint(x: rect.minX, y: rect.maxY)
let rightBottom = CGPoint(x: rect.maxX, y: rect.maxY)
path.move(to: top)
path.addLine(to: leftBottom)
path.addLine(to: rightBottom)
path.closeSubpath()
return path
}
}
- 在视图中使用该自定义形状:
struct ContentView: View {
var body: some View {
IsoscelesTriangle()
.fill(Color.blue)
.frame(width: 200, height: 200)
}
}
- Shape协议在SwiftUI绘制体系中的作用:
- 自定义图形绘制:Shape协议允许开发者定义自己的图形形状。通过实现
path(in rect:)
方法,开发者可以精确地描述图形的轮廓,从而创建出各种各样的自定义图形,像上述的等腰三角形,还可以是复杂的不规则图形等。
- 与视图系统集成:SwiftUI的视图系统高度依赖于形状。一旦定义了一个符合Shape协议的类型,它可以像其他标准视图一样被使用,例如可以对其应用填充颜色(
.fill
)、描边(.stroke
)等修饰符,方便地融入到整个视图层次结构中。
- 动画支持:由于Shape协议与SwiftUI的视图系统紧密结合,基于Shape创建的图形可以很方便地参与动画。例如,可以通过动画修改形状的路径,实现图形的动态变化效果,为用户界面增添交互性和趣味性。