SwiftUI - 形状



形状用于在 SwiftUI 中为用户界面创建图形元素。它们可以调整大小、自定义和重复使用。它们可以非常高效地创建复杂且用户友好的设计。SwiftUI 提供各种预定义形状,例如矩形、圆形等,并允许我们轻松地使用 Shape 协议创建任何自定义形状。

我们可以借助预定义的修饰符(例如 fill()、background() 等)来自定义任何形状。在本章中,我们将学习如何创建形状,并了解 SwiftUI 提供的预定义方法和修饰符。

在 SwiftUI 中创建自定义形状

在 SwiftUI 中,我们可以使用预定义的方法或使用 Shape 协议来创建形状。此处使用 Shape 协议来创建自定义形状。因此,要创建自定义形状,我们需要创建一个符合 Shape 协议的结构体。

在此结构体中,我们调用 path(in:) 方法来使用 Path 结构体定义形状的路径。之后,我们在 ContentView 中使用此结构体来自定义形状并获取形状的实时预览。我们也可以简单地使用 Path() 结构体来创建形状。

示例 1

以下 SwiftUI 程序用于使用 Shape 协议创建自定义正方形形状。

import SwiftUI

struct mySquare: Shape {
   func path(in rect: CGRect) -> Path {
      var path = Path()

      path.move(to: CGPoint(x: rect.minX, y: rect.minY))
      path.addLine(to: CGPoint(x: rect.maxX, y: rect.minY))
      path.addLine(to: CGPoint(x: rect.maxX, y: rect.maxY))
      path.addLine(to: CGPoint(x: rect.minX, y: rect.maxY))
      path.closeSubpath()
      return path
   }
}

struct ContentView: View {
   var body: some View {
      mySquare()
         .fill(Color.green)
         .frame(width: 100, height: 100)
   }
}

#Preview {
   ContentView()
}

输出

Shapes

示例 2

以下 SwiftUI 程序用于使用 Path() 结构体创建自定义正方形形状。

import SwiftUI

struct ContentView: View {
  var body: some View {
    Path { xPath in
      xPath.move(to: CGPoint(x: 50, y: 50))
      xPath.addLine(to: CGPoint(x: 110, y: 50))
      xPath.addLine(to: CGPoint(x: 110, y: 100))
      xPath.addLine(to: CGPoint(x: 50, y: 100))
      xPath.closeSubpath()
    }
    .stroke(Color.red, lineWidth: 5)
  }
}

#Preview {
  ContentView()
}

输出

Shapes

在 SwiftUI 中创建形状的方法

SwiftUI 支持各种内置方法,这些方法用于开发各种类型的形状,使 UI 更具吸引力。一些常用的方法如下:

方法 描述
path(in rect:CGRect)->Path 此方法用于在矩形参考系中指定形状轮廓。它只接受一个 rect 参数,它代表为给定形状指定的参考系。
move(to end:CGPoint) 它用于指定新路径的起点。此方法只接受一个参数,即 end。此处 end 包含新子路径的起始坐标。
addLine(to end: CGPoint) 此方法用于从当前点插入一条直线到指定点。它只接受一个参数,即 end。此参数代表线段端点的坐标。
addArc() 此方法用于在路径中插入给定半径和角度的圆弧。此方法接受六个参数
  • center 用于表示中心坐标。
  • radius 用于表示半径坐标。
  • startAngle 表示圆弧起点的角度。
  • endAndle 表示圆弧终点的角度。
  • clockwise 用于指定圆弧的方向,如果设置为 true,则圆弧按顺时针方向创建,否则圆弧将按逆时针方向创建。
  • transform 参数用于在将圆弧添加到给定路径之前对其应用仿射变换。
addCurve(to:control1:control2) 此方法用于创建曲线,曲线从路径的当前点开始,在指定的终点结束。曲线的曲率由两个控制点管理。
addEllipse(in:transform:) 此函数用于在矩形中插入椭圆。此处椭圆的中心是rect参数指定的矩形的中间点,椭圆的长轴和短轴由矩形的宽度和高度指定。
addRect(CGRect, transform) 此函数用于在给定路径中添加矩形路径。
closeSubpath() 此方法用于关闭当前子路径。
forEach(Path.Element) 此方法用于使用给定路径中存在的每个元素调用主体。

在 SwiftUI 中自定义形状的修饰符

SwiftUI 支持各种内置修饰符,用于根据用户界面设计的需求修改形状。我们可以在形状上使用单个或多个修饰符。SwiftUI 按顺序执行修饰符,因此请相应地应用它们。一些常用的修饰符如下:

修饰符 描述
.fill() 它用于使用颜色或渐变填充形状。对于颜色,您可以使用“Color.colorName”作为参数;对于渐变,您可以使用“.colorName.gradient”。
.stroke(_content:style:) 它用于借助颜色或渐变创建形状的轮廓。它接受两个参数:content 是用于描边形状的颜色或渐变;style 用于通过调整线条宽度和线条类型(例如简单的连续线或虚线)来增强描边。
.frame(width:height:alignment:) 它用于在不可见的框架中设置形状,我们可以在其中根据我们的要求调整形状的高度、宽度和对齐方式。
.shadow(color:radius:x:y:) 它用于在给定形状上应用阴影效果。此修饰符接受四个参数,它们是可选的,这意味着您可以使用任何一个或所有这些参数,这取决于您的需求。此处 color 参数用于指定阴影的颜色,radius 参数指定我们可以模糊阴影的程度,x 和 y 是阴影水平和垂直偏移的量。
.opacity(value) 它用于调整给定形状的透明度。此处此修饰符的值介于 0(完全透明)和 1(完全不透明)之间。
.rotationEffect(_angle:anchor:) 它用于以特定角度旋转形状。此方法接受两个参数:angle 用于旋转图像的角度;anchor 是形状执行旋转的单位点,此参数的默认值为中心。
.offset(x:,y:) 它用于水平和垂直移动形状特定数量。它接受两个参数:x 用于水平偏移形状;y 用于垂直偏移形状。
.overlay 它用于在给定形状的顶部添加/叠加另一个视图。
.background 它用于在给定形状的背面添加另一个视图。

SwiftUI 中的内置形状

SwiftUI 提供了一些内置形状,用于设计各种组件。这些形状易于使用且易于自定义,例如使用 SwiftUI 提供的修饰符进行样式设置、着色、填充等。以下是 SwiftUI 支持的内置形状:

形状 描述
Circle() 它用于创建圆形形状。
Ellipse() 它用于创建椭圆形形状。
Rectangle() 它用于创建矩形形状。
RoundedRectangle() 它用于创建圆角矩形形状。
Capsule() 它用于创建胶囊或药丸状形状。
广告