【Swift】UIViewのおすすめExtension – その1

Swift

今回は僕が作ったUIViewのExtensionのテンプレートを紹介しようと思います。よく使用するものをまとめているので使い勝手がいいと思います。動作についての保証はできませんが、自由にコピペして使ってもらって構いません。

環境

今回のスクショは以下の環境で撮影したものです。

  • Xcode13.2.1
  • iOS15 iPhone12 Pro MAX

角丸の設定

Viewの角を丸くする設定です。

@IBInspectable var cornerRadius: CGFloat {
    get {
        return layer.cornerRadius
    }
    set {
        layer.cornerRadius = newValue
        layer.masksToBounds = newValue > 0
    }
}

@IBInspectable を使用することでstoryboard上で設定できるようにしています。(ただし、ここで設定してもstoryboard上には反映されません。実機やシミュレータで確認してください。)

ボーダーの設定

ボーダーの幅と色を設定できる機能です。これもstoryboardから設定できます。

    // ボーダーの幅設定
    @IBInspectable var borderWidth: CGFloat {
        get {
            return self.layer.borderWidth
        }
        set {
            self.layer.borderWidth = newValue
        }
    }

    // ボーダーカラーの設定
    @IBInspectable var borderColor: UIColor? {
        get {
            return UIColor(cgColor: self.layer.borderColor!)
        }
        set {
            self.layer.borderColor = newValue?.cgColor
        }
    }

影の設定

影の色、アルファ値、オフセット、ぼかし量を設定できます。

アルファ値は0~1の範囲で指定します。

オフセットは縦横にどれくらいズラして表示するかを設定します。

ぼかし量は0~1を設定でき、0なら影は表示されず、1なら全くボケない(縁がくっきりしている)影が表示されます。

    // 影の色設定
    @IBInspectable var shadowColor: UIColor? {
        get {
            return layer.shadowColor.map { UIColor(cgColor: $0) }
        }
        set {
            layer.shadowColor = newValue?.cgColor
            layer.masksToBounds = false
        }
    }

    // 影の透明度の設定
    @IBInspectable var shadowAlpha: Float {
        get {
            return layer.shadowOpacity
        }
        set {
            layer.shadowOpacity = newValue
        }
    }

    // 影のオフセット設定
    @IBInspectable var shadowOffset: CGSize {
        get {
            return layer.shadowOffset
        }
        set {
            layer.shadowOffset = newValue
        }
    }

    // 影のぼかし量の設定
    @IBInspectable var shadowRadius: CGFloat {
        get {
            return layer.shadowRadius
        }
        set {
            layer.shadowRadius = newValue
        }
    }

実機で動作を見る

これらの設定をして実機で動作を見てみましょう。

このような見た目になります。(わかりやすくViewの背景をオレンジに設定しています。)

コード

今回紹介したコードをまとめたものがこちらです。

import UIKit

extension UIView {

    // 角丸の設定
    @IBInspectable var cornerRadius: CGFloat {
        get {
            return layer.cornerRadius
        }
        set {
            layer.cornerRadius = newValue
            layer.masksToBounds = newValue > 0
        }
    }

    // ボーダーの幅設定
    @IBInspectable var borderWidth: CGFloat {
        get {
            return self.layer.borderWidth
        }
        set {
            self.layer.borderWidth = newValue
        }
    }

    // ボーダーカラーの設定
    @IBInspectable var borderColor: UIColor? {
        get {
            return UIColor(cgColor: self.layer.borderColor!)
        }
        set {
            self.layer.borderColor = newValue?.cgColor
        }
    }

    // 影の色設定
    @IBInspectable var shadowColor: UIColor? {
        get {
            return layer.shadowColor.map { UIColor(cgColor: $0) }
        }
        set {
            layer.shadowColor = newValue?.cgColor
            layer.masksToBounds = false
        }
    }

    // 影の透明度の設定
    @IBInspectable var shadowAlpha: Float {
        get {
            return layer.shadowOpacity
        }
        set {
            layer.shadowOpacity = newValue
        }
    }

    // 影のオフセット設定
    @IBInspectable var shadowOffset: CGSize {
        get {
            return layer.shadowOffset
        }
        set {
            layer.shadowOffset = newValue
        }
    }

    // 影のぼかし量の設定
    @IBInspectable var shadowRadius: CGFloat {
        get {
            return layer.shadowRadius
        }
        set {
            layer.shadowRadius = newValue
        }
    }

}

コメント