SwiftUI 框架

利用 ConfettiSwiftUI 簡單打造屬於自己的彩色紙屑動畫

我們不時都會收到讀者提問如何製作彩色紙屑動畫。在這篇文章中,Simon 會為大家介紹 ConfettiSwiftUI 開源程式庫,這個程式庫的很多元素都可以客製化,讓開發者可以輕鬆打造屬於自己的彩色紙屑動畫。
利用 ConfettiSwiftUI 簡單打造屬於自己的彩色紙屑動畫
Photo by Cristian Escobar on Unsplash
In: SwiftUI 框架

我們不時都會收到讀者提問如何製作彩色紙屑動畫,當然,我們可以使用 SwiftUI 或 UIKit 從零開始構建動畫。但最近,我找到了一個名為 ConfettiSwiftUI 的開源程式庫,讓開發者可以創建不同類型的彩色紙屑動畫。所以,與其從零開始開發動畫,不如讓我們看看如何使用 Swift Package,來創建一些彩色紙屑動畫吧!

ConfettiSwiftUI 的基本用法

ConfettiSwiftUI 是一個 Swift Package,因此要把它 bundle 到 Xcode 專案十分簡單。

創建了一個新的 Xcode 專案之後,讓我們到 Xcode 選單點選 File > Add Packages…,並輸入以下 Package URL:

https://github.com/simibac/ConfettiSwiftUI.git

Xcode 應該會自動加載 Package 的資訊。然後點擊 Add Package 按鈕,來把 Package 添加到專案中。

下載好 Swift Package 後,我們就可以到 ContentView.swift 檔案。我們只需要像下面這樣 import ConfettiSwiftUI 並更新 ContentView,就可以使用這個程式庫:

struct ContentView: View {
    @State private var counter = 0

    var body: some View {
        Button(action: {
            counter += 1
        }) {
            Text("🎃")
                .font(.system(size: 50))
        }
        .confettiCannon(counter: $counter)

    }
}

在以上的程式碼中,我們創建了一個表情符號按鈕,並附加了 confettiCannon 修飾符,用來渲染彩色紙屑動畫。這個修飾符接受不同的參數 (parameter),但大部分都是 optional 的。我們只需要提供一個計數器 (counter) 的 binding,就可以觸發動畫。

當按鈕被點擊,我們就將 counter 變數的數值加一。這就是我們觸發彩色紙屑動畫的方式。

讓我們在模擬器執行 App,或就這樣在預覽面版測試 App。現在,當我們點擊表情符號按鈕,就會看到彩色紙屑動畫。

swiftuiconfetti-library-demo

添加更多彩色紙屑

ConfettiSwiftUI 提供了幾個參數,讓開發者客製化彩色紙屑動畫。我們可以利用 num 參數控制彩色紙屑的數量:

.confettiCannon(counter: $counter, num: 50)

在預設情況下,它會製造 20 個彩色紙屑,我們可以按需要調整數值。

改變彩色紙屑散開的半徑

swiftui-confetti-explosion-radius

如果我們想控制彩色紙屑動畫的寬度,可以改變 radius 參數的數值:

.confettiCannon(counter: $counter, radius: 500.0)

預計數值是 300.0,數值越大,彩色紙屑散開的範圍就越大。

客製化彩色紙屑的顏色和散落高度

我們也可以利用 colorsrainHeight參數,來客製彩色紙屑的顏色和動畫的垂直距離:

.confettiCannon(counter: $counter, colors: [.purple, .orange], rainHeight: 1000.0, radius: 500.0)

以上的程式碼建立了一個彩色紙屑的動畫,當中有紫色和橙色的彩色紙屑。

swiftui-confetti-custom-color

使用自己喜歡的圖形

我們使用這個開源程式庫,還可以轉用自己喜歡的圖形來取代彩色紙屑。我們可以用表情符號、其他內建形狀(例如 .roundedCross)、或 SF Symbol。

.confettiCannon(counter: $counter, confettis: [.sfSymbol(symbolName: "trash"), .shape(.roundedCross), .text("🎃")], colors: [.purple, .orange], confettiSize: 20.0, radius: 400.0)

我們可以在 confettis 參數指定自己喜歡的圖形,並在 confettiSize 調整圖形的大小。

swiftui-confettis-custom-shape

不斷重覆

這個修飾符還有 repetitionsrepetitionInterval 參數,讓我們可以不斷重覆同一個動畫。讓我們看看以下的範例程式碼:

.confettiCannon(counter: $counter, num: 1, confettis: [ .text("🎃")], colors: [.purple, .orange], confettiSize: 20.0, radius: 10.0, repetitions: 1000, repetitionInterval: 0.05)

這段程式碼會把同一個動畫重覆 1000 次,重複的時間差距則設置為 0.05 秒。

swiftui-confetti-animation-demo

總結

ConfettiSwiftUI 是一個非常好用的開源程式庫,讓我們可以製作彩色紙屑動畫。程式庫的很多元素都可以客製化,有不同的屬性讓我們控制彩色紙屑的大小和形狀。在這篇教學文章中,我只介紹了一些常用的參數。你可以參閱官方 API 文檔,看看其他可以自己配置的屬性。

希望你喜歡這篇教學文章,你也可以花點時間進一步探索這個程式庫。

譯者簡介:Kelly Chan-AppCoda 編輯小姐。

作者
Simon Ng
軟體工程師,AppCoda 創辦人。著有《iOS 18 App 程式設計實戰心法》、《iOS 18 App程式設計進階攻略》以及《精通SwiftUI》。曾任職於HSBC, FedEx等跨國企業,專責軟體開發、系統設計。2012年創立AppCoda技術部落格,定期發表iOS程式教學文章。現時專注發展AppCoda業務,致力於iOS程式教學、產品設計及開發。你可以到推特與我聯絡。
評論
更多來自 AppCoda 中文版
如何在 SwiftUI App 中開發 Live Activities
SwiftUI 框架

如何在 SwiftUI App 中開發 Live Activities

Live Activities 首次於 iOS 16 推出,是 Apple 最令人興奮的更新之一,能讓 App 與使用者在即時互動上更有連結。它不再需要使用者不斷打開 App,Live Activities 可以讓資訊直接顯示在鎖定畫面和 Dynamic Island 上。
使用 Tool Calling 強化 Foundation Models 功能
AI

使用 Tool Calling 強化 Foundation Models 功能

在前幾篇教學中,我們介紹了 Foundation Models 在 iOS 26 中的運作方式,以及如何使用這個全新框架打造具備 AI 功能的應用。我們也介紹了 @Generable 巨集,它能輕鬆地將模型回應轉換為結構化的 Swift 類型。 現在,在這個 Foundation
活用 Foundation Models 的 @Generable 與 @Guide 製作測驗 App
AI

活用 Foundation Models 的 @Generable 與 @Guide 製作測驗 App

在前一篇教學中,我們介紹了 Foundation Models 框架,並示範了如何用它來進行基本的內容生成。那個過程相當簡單——你提供一個提示詞(prompt),等幾秒鐘,就能獲得自然語言的回應。在我們的範例中,我們建立了一個簡單的問答 App,讓使用者可以提問,App 則直接顯示生成的文字。 但如果回應變得更複雜——你需要把非結構化文字轉換為結構化的物件呢? 舉例來說,
很好! 你已成功註冊。
歡迎回來! 你已成功登入。
你已成功訂閱 AppCoda 中文版 電子報。
你的連結已失效。
成功! 請檢查你的電子郵件以獲取用於登入的連結。
好! 你的付費資料已更新。
你的付費方式並未更新。