最近swiftを使っています。
swiftにはcheckboxがデフォルトのUIライブラリには存在していないため、自作しなければいけません。
色々記事を見ている中で、こんな記事がありました。
qiita.com
このcheckboxの作り方を詳しく見てみると、わからない部分があったので検索しながら、どのように作られているのか書いていきます。
・checkboxの基礎となるファイルは５つ
①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軸が違う場所に文字が書けるかやってみます。