本日は9/9 は台風の影響のため、電車が運転見合わせ状態から午前中に運転再開すると、とても混み合うので午前休にしました。
満員電車に乗るのも、危険だと思うので、安全第一です。
この間にブログでも記載しようと思います。
以前、業務でラベルのタグ付けをデザインする上で、UILabelのデザイン拡張をするプログラムを作成しました。
今回は題名の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の紹介です。貴重なお時間お読みくださいまして、ありがとうございます。
コメントを残す