UILabelの拡張クラス AllLabel

本日は9/9 は台風の影響のため、電車が運転見合わせ状態から午前中に運転再開すると、とても混み合うので午前休にしました。

満員電車に乗るのも、危険だと思うので、安全第一です。

この間にブログでも記載しようと思います。

以前、業務でラベルのタグ付けをデザインする上で、UILabelのデザイン拡張をするプログラムを作成しました。

今回は題名のAllLabelについて、

         AllLabel

こちらの機能はStoryboardでラベルの文字位置を可変、ラベルのデザインを可変できる機能です。

デフォルトでは文字位置を可変するプログラムはないので、実施する場合は自装する必要があります。

プログラムの紹介

自動的に高さを決めるプログラム、 UIEdgeInsets.zeroの場合、すなわち値が0の場合は自動的に余白を設定します。初めにStoryboardで設定した値です。

var textInsets = UIEdgeInsets.zero {
        didSet { invalidateIntrinsicContentSize() }
    }

この記述がされている場合は、Storybordのデザインを反映する機能です。

@IBDesignable

この記述がされている場合は、Storybord右のアトリビュートインスペクターに反映する機能です。

@IBInspectable
@IBInspectable var cornerRadius: CGFloat = 0.0
@IBInspectable var borderColor: UIColor = UIColor.clear
@IBInspectable var borderWidth: CGFloat = 0.0

cornerRadiusやborderColorなどの値をStoryboard上のエディターで可変出来ます。

オープンソースライブラリーは軽いものでも、何MBの容量がありますが、自作する場合は何KB容量で運用できます。

複雑なUIなども自作出来るとアプリ自体のパフォーマンスが向上すると思います。工数もあるので、判断基準は千差万別です。

overrideと記載されているメソッドは基本的にAppleのデフォルトメソッドです。

カーソルを合わして、command + track padをエンターで画像のような画面になり、実装してある元のクラスにjump出来ます。

実装してある元のクラスの解説になります。このクラスを使用する場合にoverrideを記述します。

extensionは拡張できる機能です。

getでプロパティ値を取得して、setのnewValueで、新しい値になります。

public extension Int からのメソッドは表示形式です。

数字のクラスの中に文字メソッドを作成して、数字を指定した文字形式に変換するクラスです。

使い方

formattedJPString.text = 123456789.formattedJPString
jpyLabel.text = 123456789.JPYString

結果 123,456,789
結果 ¥123,456,789

制約が更新されるとlayoutSubviews()が呼び出され、フレームが更新されるので、プログラムで変更する場合に使用します。

override func layoutSubviews()

今回の場合に

usdLabel.priceCount  = 5434 とすると画像のようになります。

インテントを設定するメソッドです。このメソッドで文字のインテントを実現しています。

override func drawText(in rect: CGRect)

このクラスでは、invalidateIntrinsicContentSizeで自動計算した値を、インテントを調整できるCGRectを作成して設定しています。起動時に処理され、インテントを設定した値を反映します。後からでも呼び出すことは出来ますが、使い方としては、Storyboard上で設定した値を反映する形になります。

override func textRect(forBounds bounds: CGRect, limitedToNumberOfLines numberOfLines: Int) -> CGRect

今回追加した機能、文字に対する影。(UILabelではLabel自体に影はつきません。)

使い方

jpyLabel.textShadow(shadowBlurRadius: 5.0, shadowColor: .green, shadowOffset: CGSize(width: 25.0, height: jpyLabel.frame.height/4), textColor: .black)

結果

以上、UILabelの拡張クラス AllLabelの紹介です。貴重なお時間お読みくださいまして、ありがとうございます。