SwiftUI - 使用内置形状
SwiftUI 支持一些内置形状,用于开发自定义设计和用户界面组件。这些形状易于使用,可以自定义各种样式、颜色、填充、变换等。它们通常用于剪辑内容、创建自定义视图、组件等。SwiftUI 支持以下内置形状 −
- 圆形
- 椭圆形
- 矩形
- 圆角矩形
- 胶囊形
现在让我们详细讨论每个形状,然后在本章结束时,我们将使用这些形状创建一个简单的单元格。
圆形
我们可以使用 Circle() 创建一个圆形。它在视图框架的中心创建一个圆。圆的半径是框架长度的一半。默认情况下,圆是实心的,颜色为黑色,但我们可以使用各种修饰符(如填充、描边、框架等)对其进行修改。
语法
以下是语法−
Circle()
示例
import SwiftUI
struct ContentView: View {
var body: some View {
// 绘制圆形
Circle().fill(Color.brown).frame(width: 50, height: 50)
}
}
#Preview {
ContentView()
}
输出
椭圆
椭圆是一个二维的椭圆形,或者我们可以说它看起来像一个拉长的圆圈。椭圆的宽度和高度不同。在 SwiftUI 中,我们可以使用 Ellipse() 创建椭圆形。它会创建一个在视图框架内对齐的椭圆。我们可以根据需要使用修饰符修改椭圆。
语法
以下是语法−
Ellipse()
示例
import SwiftUI
struct ContentView: View {
var body: some View {
// 绘制椭圆
Ellipse().stroke(Color.blue, lineWidth: 8).frame(width: 50, height: 100)
}
}
#Preview {
ContentView()
}
输出
矩形
矩形是最常用的形状。因此,我们可以使用 Rectangle() 轻松创建一个矩形。它将矩形与视图框架对齐。它支持各种属性,允许它具有描边或可用作蒙版。
语法
以下是语法−
Rectangle()
示例
import SwiftUI
struct ContentView: View {
var body: some View {
// 绘制矩形
Rectangle().fill(Color.blue).frame(width: 100, height: 200)
}
}
#Preview {
ContentView()
}
输出
圆角矩形
SwiftUI 还提供内置的 RoundedRectangle() 来创建圆角矩形形状。圆角矩形是一种非常有用的形状,带有圆角(cornerRadius)和样式属性。它用于创建按钮。
语法
以下是语法−
RoundedRectangle(cornerRadius:CGSize, style: RoundedCornerStyle)
它采用以下参数−
- cornerSize:它包含圆角的半径。
- style:它代表圆角的样式。
示例
import SwiftUI
struct ContentView: View {
var body: some View {
// 绘制圆角矩形
RoundedRectangle(cornerRadius: 20, style: .circular)
.fill(Color.pink)
.frame(width: 300, height: 200)
}
}
#Preview {
ContentView()
}
输出
Capsule
SwiftUI 还提供了一种名为 capsule() 的特殊形状。它是一种药丸状形状或带有圆形末端的细长椭圆形。它通常用于创建按钮、徽章和其他 UI 组件。
语法
以下是语法−
Capsule()
示例
import SwiftUI
struct ContentView: View {
var body: some View {
// 绘图胶囊
Capsule().fill(Color.pink).frame(width: 300, height: 100)
}
}
#Preview {
ContentView()
}
输出
现在,我们将创建一个布局来了解这些形状的实际用途。在这里,我们将使用 Rectangle() 作为背景、RoundedRectangle() 作为框、Circle() 作为徽标和 Capsule() 作为按钮等形状创建一个登录页面
示例
import SwiftUI
struct ContentView: View {
var body: some View {
ZStack {
Rectangle()
.foregroundColor(.brown)
.ignoresSafeArea()
HStack {
Circle()
.fill(Color.mint)
.frame(width: 70, height: 70)
.overlay(Text("T").font( /*@START_MENU_TOKEN@*/.title /*@END_MENU_TOKEN@*/))
VStack {
Text("TutorialsPoint").font(.title)
HStack {
Capsule()
.fill(Color.gray)
.frame(height: 30)
.overlay(Text("Login").font(.headline))
}.frame(width: 120)
}
}.padding()
.background(Color.white)
.clipShape(RoundedRectangle(cornerRadius: 50))
}
}
}
#Preview {
ContentView()
}
输出

