Shape 圖形規範的類型,是由畫筆(Path)描繪線條輪廓,就像在心中打草圖一樣,並不涉及色彩,通常也不會固定大小,而是等到畫布圖層或視圖之中顯示時,才決定具體的顏色與寬高尺寸,這樣可以讓 Shape 圖形提供最有彈性的運用。
上一節的正多邊形 Shape,稍作變化,就可變成多角星形,例如五邊形變成五角星,只要在邊線中點往內凹即可。程式碼僅需增加一組內凹的「內頂點」,原來頂點改稱「外頂點」,再加一個參數 r (半徑比)表示內凹程度,如下圖:
Shape 圖形的邊線與內部,在畫布圖層或視圖中可用 stroke() 與 fill() 分別上色,除了單色之外,還可以使用「漸層色」(Gradient),所謂「漸層」是指兩色或多色之間加以過渡所顯示的效果,怎麼做呢?以下範例將用同一組配色做出三種漸層效果,如下圖:
上面Shape圖形的顏色,均採用「藍-黃」雙色漸層,不過,在 SwiftUI 中有多種不同的漸層過渡方式,包括:
套用漸層色可分成兩個步驟,第一、先用 Gradient() 物件定義好漸層色,第二、再指定上述過渡方式。用法是不是跟第1課動畫(Animation)很像?例如:
let 黃藍漸層 = Gradient(colors: [.yellow, .blue])
let 藍黃藍 = Gradient(colors: [.blue, .yellow, .blue])
圖層.fill(
多角星(5, r: 0.75).path(in: 左半框),
with: .radialGradient(
黃藍漸層,
center: 左中心,
startRadius: .zero,
endRadius: 半徑))
圖層.fill(
多角星(16, r: 0.9).path(in: 右半框),
with: .conicGradient(藍黃藍, center: 右中心))
先以 Gradient 物件定義由黃、藍雙色構成「黃藍漸層」,Gradient 的參數為一組顏色陣列,裡面可任意包含2個以上的顏色。
再以「黃藍漸層」加到放射狀漸層 radialGradient() 之中即可,放射狀漸層還須額外指定中心點與半徑等參數。