開発環境
> xcodebuild -version Xcode 14.0 Build version 14A5228q
Xcodeはbetaだが本記事の内容はiOS16未満のAPIを使用。
モチベーション
マスク処理やってみたいけどパッと実装が思いつかなかったので書いてみる。
お題
方針
LinearGradientでグラデーションを作って、mask(alignment:_:)としてTextを指定する。maskはiOS15.0からの登場ということで比較的新しいAPI。
コード
import SwiftUI struct ContentView: View { var body: some View { LinearGradient( colors: [ .orange, .pink, .purple, .blue, .cyan ], startPoint: .leading, endPoint: .trailing ).frame(width: UIScreen.main.bounds.width / 1.5) .mask { Text("輝きたい。") .font(.system(size: 50, design: .serif)) } } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }
実行結果
欲を言えば斜体にしたかったのだが、italic() が効かなかった。日本語に対しては設定されてないみたい。
所感
結構簡単にできた。サイズの計算だけもう少しちゃんと書きたい。Textの幅に応じてLinerGradientの幅を決めたい。今の所実装方法思いついてないけど、GeometryReaderを使えばいけそう?GeometryReader自体少ししか触ってなく、使い方忘れたので書いていく。