SwiftUI 教程

SwiftUI 主页 SwiftUI 概览 SwiftUI 与 UIkit

SwiftUI 环境

SwiftUI 安装和环境配置 SwiftUI 基本组件 SwiftUI 构建第一个应用程序

SwiftUI 视图

SwiftUI 视图 SwiftUI 自定义文本视图 SwiftUI 自定义图像视图 SwiftUI 堆栈

SwiftUI 绘制形状

SwiftUI 形状 SwiftUI 绘制线条 SwiftUI 绘制矩形 SwiftUI 绘制圆角矩形 SwiftUI 绘制三角形 SwiftUI 绘制圆形 SwiftUI 绘制星形 SwiftUI 绘制多边形 SwiftUI 绘制饼图 SwiftUI 使用内置形状

SwiftUI 文本

SwiftUI 文本视图 SwiftUI 文本输入和输出

SwiftUI 颜色

SwiftUI 颜色 SwiftUI 颜色选择器 SwiftUI 渐变 SwiftUI 调整颜色

SwiftUI 效果

SwiftUI 效果 SwiftUI 混合效果 SwiftUI BLur 效果 SwiftUI 阴影效果 SwiftUI 悬停效果

SwiftUI 动画

SwiftUI 动画 SwiftUI 创建动画 SwiftUI 创建显式动画 SwiftUI 多个动画 SwiftUI 过渡 SwiftUI 不对称过渡 SwiftUI 自定义过渡

SwiftUI 图像

SwiftUI 图像 SwiftUI 图像作为背景 SwiftUI 旋转图像 SwiftUI 媒体

SwiftUI 视图布局

SwiftUI 视图布局 SwiftUI 视图大小 SwiftUI 视图间距 SwiftUI 视图填充

SwiftUI UI 控件

SwiftUI UI 控件 SwiftUI 按钮 SwiftUI 复选框 SwiftUI 菜单栏 SwiftUI 工具栏 SwiftUI 搜索栏 SwiftUI 文本字段 SwiftUI 滑块 SwiftUI 切换 SwiftUI 选择器 SwiftUI 菜单

SwiftUI 列表 &表格

SwiftUI 列表 SwiftUI 静态列表 SwiftUI 动态列表 SwiftUI 自定义列表 SwiftUI 表格

SwiftUI 表单

SwiftUI 表单 SwiftUI 在部分中拆分表单

SwiftUI 事件处理

SwiftUI 事件处理 SwiftUI 手势 SwiftUI 剪贴板 SwiftUI 拖放 SwiftUI 焦点 SwiftUI 警报

SwiftUI 杂项

SwiftUI 容器 SwiftUI 导航 SwiftUI 通知 SwiftUI 跨平台 UI SwiftUI 数据 SwiftUI 可访问性

SwiftUI 框架集成

SwiftUI 框架集成 SwiftUI 与 UIKit 交互 SwiftUI 创建 macOS 应用

SwiftUI 有用资源

SwiftUI 有用资源 SwiftUI 讨论


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表示与圆弧终点的角度。
  • clock用于指定圆弧的方向,如果设置为 true,则圆弧按顺时针方向创建,否则圆弧按逆时针方向创建。
  • transform参数用于在将圆弧添加到给定路径之前对圆弧应用仿射变换。
addCurve(to:control1:control2) 此方法用于创建一个curve,曲线从路径的当前点开始,到指定的端点结束。曲线的曲率由两个控制点管理。
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:) 用于以特定角度旋转形状。此方法采用两个参数:图像旋转的角度和形状旋转的点单位,该参数的默认值为中心。
.offset(x:,y:) 用于水平和垂直移动形状特定量。它需要两个参数:x 用于水平偏移形状,y 用于垂直偏移形状。
.overlay 它用于在给定形状的顶部添加/覆盖另一个视图。
.background 它用于在给定形状的背面添加另一个视图。

SwiftUI 中的内置形状

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

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