気づいた点をまとめておく(いずれページなどでまとめる)
View.bounds.width / heightの罠
AutoLayoutで設定した値が反映するタイミングが
UIViewController::viewDidLoad()メソッドではない。
ではどこでというと
UIViewController::viewDidLayoutSubviews()メソッドである
viewのサイズを取得してうんちゃらするなら 上記のメソッドで行う
View.draw() メソッドで描画できるオブジェクト
線
四角形
画像
テキスト
曲線
タッチ入力のイベントメソッドについて
iosのタッチ入力で標準サポートしているのは
これらのイベントメソッドが用意してある。
入力の便利ライブラリ UIGestureRecognizer
- タップ
- ダブルタップ
- フリック
- ドラッグ
- ピンチ
- ローテイト
- ロングプレス
- エッジ
これら8種類の機能をサポートする
直でコード実装しなくても
Stroyboard上から機能を付与することもできる
StroyboardのOutlet Collection について
名前の通り Outlet を Collection するもの
Outletの数がたくさんできると管理が大変なので一つの変数にまとめて管理しやすいようにしている
UIViewの描画イベントメソッド呼び出し方法
UIViewクラスの描画メソッドには色々ある
描画メソッドをキックするには
UIView.setNeedsDisplay()メソッドを呼び出す
UIViewのinitをオーバーライドする方法
UIViewクラスを継承してinitメソッドをオーバーライドしたいケースがあると思う
class UIChildView: UIView {
overried func init() {
}
}
こんな風にすると思うが、これではエラーになる
エラーの原因
UIViewクラスは initメソッドに require 識別子がついている
この識別子が付いていると継承先で init メソッドを overried するとエラーになる
エラー回避方法
require 識別子が付いている init メソッドを overried する
class UIChildView: UIView {
overried funct init() {
}
// ↓エラー回避のため追加
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
追加したメソッドはどのケースで呼ばれる
Stroyboard / xid の配置したUIViewが初期化した時に呼ばれるメソッドらしい
コード上のみで初期化では呼ばれない
fatalErrorメソッドをつけているのはコード上以外で呼ばれた場合はエラーにするため
swift3.0以降のクラスのアクセス指定子
3.0より前とは違うので注意
- private : 定義したスコープ内でしか扱えない
- open: c/c++ の public と同じ
- public: 別モジュールでは継承やオーバライドができない
- fileprivate: c/c++ の private と同じ
- internal: 同じモジュールのみアクセス可能
最終更新:2017年12月06日 17:04