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() 它用於建立膠囊或藥丸狀形狀。
廣告
© . All rights reserved.