6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SwiftのViewをグラデーション(gradation)(優良記事まとめ)

Last updated at Posted at 2019-07-20

概要

SwiftでViewをグラデーションするのは2通り
####IBDesignableでカスタムクラス作ってStoryboardで設定いじいじ
※透明度まで考慮してgradationを考える際の注意点
ex. 透明→黒というgradationを作成する場合
Top Color: Clear
Bottom Color: Black
→gradationがおかしくなる(透明度だけでなくrgbも差異が生じていてgradationしてしまう)
Top Color: BlackかつOpacity 0%
Bottom Color: Black
→これならrgbが一致した状態で透明度のみgradationしてくれる

シンプルにカスタムクラス作ってコード側でパラメータいじいじ

IBDesignableでカスタムクラス

Swift IBDesignable入門 - Qiita
@IBDesignableをハックしてコードでの設定をRunせず確認する - Qiita
→上記2つは基本からきちんと理解できます
IBDesignableがウザい - Qiita
→デメリットがサクッとまとまってます

シンプルにカスタムクラス

2つとも似たような感じ。

Swiftで背景にグラデーションを設定する - Qiita
→簡単なコードと使い方が載ってます(↓はコメント省いたやつ)

simpleCustomClassView.swift
let topColor = UIColor(red:0.07, green:0.13, blue:0.26, alpha:1)
let bottomColor = UIColor(red:0.54, green:0.74, blue:0.74, alpha:1)
let gradientColors: [CGColor] = [topColor.CGColor, bottomColor.CGColor]
let gradientLayer: CAGradientLayer = CAGradientLayer()
gradientLayer.colors = gradientColors
gradientLayer.frame = self.view.bounds
self.view.layer.insertSublayer(gradientLayer, atIndex: 0)

ios - Programmatically create a UIView with color gradient - Stack Overflow
↓一番参考になりそうなやつ?(Swift3.0らしいし)

var gradientView = UIView(frame: CGRect(x: 0, y: 0, width: 320, height: 35))
 let gradientLayer:CAGradientLayer = CAGradientLayer()
 gradientLayer.frame.size = self.gradientView.frame.size
 gradientLayer.colors = 
 [UIColor.white.cgColor,UIColor.red.withAlphaComponent(1).cgColor] 
 gradientView.layer.addSublayer(gradientLayer)
 gradientLayer.startPoint = CGPoint(x: 0.0, y: 1.0)
 gradientLayer.endPoint = CGPoint(x: 1.0, y: 1.0)

制約(AutoLayoutとか入ってるとき)

上記のようにsubLayerを用いたやり方だと対象ViewがAutoLayoutで配置されていて幅や高さが決定していない状態だとgradationがおかしくなったりするらしい

override public class var layerClass: Swift.AnyClass {
    get {
        return CAGradientLayer.self
    }
}

ViewlayerごとCALayerCAGradientLayerにするとAutoLayoutにも対応してくれるみたいです

他参考記事

swiftでグラデーションがかかったViewを作成する[CAGradientLayer][swift3.0] - MILLEN BOX
→少しややこしめVer.
Swift UIViewの背景をグラデーションさせる方法 -iPhoneアプリ開発-
[Swift]グラデーション設定できるViewとかなんとか|杏z 学習帳(旧)

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?