【Swift UI】LinearGradientでグラデーションを実装する方法

この記事からわかること

  • Swift UIグラデーションカラー実装する方法
  • LinearGradient構造体使い方
  • GradientUnitPoint指定方法
  • 複数色グラデーション配置するには?
  • 円形円錐型でグラデーションする方法

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

Swift UIでグラデーションを実装する方法

Swift UIでグラデーションを実装するにはLinearGradient構造体を使用します。例えば画面全体をグラデーションカラーにしたい場合は以下のように実装します。

struct ContentView: View {
    var body: some View {
        LinearGradient(
            gradient: Gradient(colors: [
                Color(red: 0/255, green: 147/255, blue: 233/255),
                Color(red: 128/255, green: 208/255, blue: 199/255)]),
            startPoint: .leading, endPoint: .trailing
        ).ignoresSafeArea()
    }
}
【Swift UI】LinearGradientでグラデーションを実装する方法

UIKitではCAGradientLayerクラスを使用して実装します。

LinearGradient(線型)

公式リファレンス:LinearGradient構造体

LinearGradient直線的なグラデーションを実装できる構造体です。イニシャライザは以下のように定義されており、Gradient型でグラデーションで使用する色startPointendPointでグラデーションの開始位置と終了位置を指定します。

init(
    gradient: Gradient,
    startPoint: UnitPoint,
    endPoint: UnitPoint
)

Gradient型

公式リファレンス:Gradient構造体

Gradient型ではinit(colors: [Color])を使用してグラデーションで使用するColor構造体を配列で渡します。配列なので2つでなく、3つや4つなど複数の色を渡すことが可能です。

Gradient(colors: [
    Color(red: 255/255, green: 60/255, blue: 172/255),
    Color(red: 120/255, green: 75/255, blue: 160/255),
    Color(red: 43/255, green: 134/255, blue: 197/255)])
【Swift UI】LinearGradientでグラデーションを実装する方法

UnitPoint型

グラデーションの方向はUnitPoint型でstartPointendPointを指定します。指定できるのは以下の通りです。名称からある程度予想できると思います。

@frozen  public struct UnitPoint : Hashable {
    public static let zero: UnitPoint
    public static let center: UnitPoint
    public static let leading: UnitPoint
    public static let trailing: UnitPoint
    public static let top: UnitPoint
    public static let bottom: UnitPoint
    public static let topLeading: UnitPoint
    public static let topTrailing: UnitPoint
    public static let bottomLeading: UnitPoint
    public static let bottomTrailing: UnitPoint
}

RadialGradient(放射状)

公式リファレンス:RadialGradient

LinearGradientでは線形のグラデーションでしたがRadialGradient構造体を使用すれば円形(放射状)のグラデーションを実装することができます。

struct ContentView: View {
    var body: some View {
        RadialGradient(
            gradient: Gradient(colors: [
                Color(red: 43/255, green: 134/255, blue: 197/255),
                Color(red: 120/255, green: 75/255, blue: 160/255)]),
            center: .center,
            startRadius: 1,
            endRadius: 200
        ).ignoresSafeArea()
    }
}
【Swift UI】LinearGradientでグラデーションを実装する方法

引数に指定する値

AngularGradient(円錐)

公式リファレンス:AngularGradient

AngularGradient構造体を使用すれば円錐状のグラデーションを実装することができます。

struct ContentView: View {
    var body: some View {
        AngularGradient(
            gradient: Gradient(colors: [
                Color.black,
                Color(red: 43/255, green: 134/255, blue: 197/255),
                Color.black]),
            center: .center,
            angle: .degrees(-45)
        ).ignoresSafeArea()
    }
}
【Swift UI】LinearGradientでグラデーションを実装する方法

引数に指定する値

EllipticalGradient(楕円)

公式リファレンス:EllipticalGradient

EllipticalGradient構造体を使用すれば楕円型のグラデーションを実装することができます。

struct ContentView: View {
    var body: some View {
        EllipticalGradient(
            gradient: Gradient(colors: [
                Color.black,
                Color(red: 43/255, green: 134/255, blue: 197/255),
                Color.black])
        ).ignoresSafeArea()
    }
}
【Swift UI】LinearGradientでグラデーションを実装する方法

おまけ

Swift UIでカラーを指定する際は16進数で指定する方が楽ですが、デフォルトでは用意されていないので拡張して以下のように指定できるようにしておくと便利です。

Color(hexString: "#434343")

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index