プログラミングと日々思ったことなど

ブログ名通りです。仕事でプログラミングをはじめました。

swiftでのcheckboxについてとその周辺

最近swiftを使っています。
swiftにはcheckboxがデフォルトのUIライブラリには存在していないため、自作しなければいけません。
色々記事を見ている中で、こんな記事がありました。

qiita.com

このcheckboxの作り方を詳しく見てみると、わからない部分があったので検索しながら、どのように作られているのか書いていきます。

・checkboxの基礎となるファイルは5つ

①YSCheckBox.h
ヘッダファイル(定数や宣言などを書くファイル、ソースファイルを作るための部品のようなもの)
ヘッダファイルがあるのは、オリジナルのCocoa Touch Frameworkを作成するために外部に提供する内容を書く必要があるため。
ここではコンパイルする時に必要な変数。
参考:The Pragmatic Ball boy

②YSCheckBox.swift
checkboxの形・on/offの時の動きが書いてある。
CGFloat・・・座標、サイズ(縦横など)の数値を入れる型。
CAShapeLayer・・・ベクター画像(線を用いて図形を描画・管理した画像)を表示する
CGRect・・・座標(CGPoint)とサイズ(CGSize)を持つ型
UIBezierPath・・・アプリで図形を描画する時に使うクラス
→CGPath をセットすることで形状を表現
lineWidth・・・線の幅
fillColor・・・背景の色
strokeColor・・・線の色
insertSublayer・・・レイヤー(階層)の順番を決められる。これでViewの階層も操れる。
参考:Swift - CAGradientLayerでグラデーションを実装する際のCALayerの扱いについて|teratail

func drawSelectedCircle()・func clearSelectedCircle() の中で、fillMaxPath()を呼び出している(戻り値は指定サイズ半径のUIBezierPath)

func drawSelectedCircle()・func clearSelectedCircle() の中で、fillMinPath()を呼び出している(戻り値は半径0のUIBezierPath)

③YSCheckBoxModel.swift
プロトコル(具体的な処理内容は書かず、クラスや構造体が実装するプロパティとメソッドを定義する機能)が書かれてある
func ysCheckBoxModelDidSetが書かれてあって、selectedArrにappend(配列の要素を追加)している。

④YSCheckBoxGroupView.swift
enumerated・・・配列のインデックスを取ってくる
UIView.translatesAutoresizingMaskIntoConstraints・・・viewのフレームの大きさ、配置(x, y, width, height)を直接操作するか、自動にするか
参考:A-Liaison BLOG: Auto Layout と Manual Layout を混載させるときに役立つ UIView.translatesAutoresizingMaskIntoConstraints プロパティの話
"V:|-"・・・ビューの場所を設定
btnLabelsにcheckboxの数が入っている
②でボタンの形自体を作っていて、④で実際の配置を決めている。

⑤YSCheckBoxViewController.swift
実際にcheckboxを使う時に、呼び出すファイル。
②、③、④を呼び出している
btnLabelsに表示させる配列の要素が入り、checkBoxGroupViewに飛んで要素数が数えられる。

実際に使う時に、ViewControllerから幅などを設定できるが、デフォルトでも設定されているのでその数で配置される。

少し分かったので、明日マージンの値を取って同じx軸でy軸が違う場所に文字が書けるかやってみます。