アットウィキロゴ

メモ

気づいた点をまとめておく(いずれページなどでまとめる)


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メソッドをつけているのはコード上以外で呼ばれた場合はエラーにするため

参考にしたサイト
subclassの初期化

swift3.0以降のクラスのアクセス指定子

3.0より前とは違うので注意
  • private : 定義したスコープ内でしか扱えない
  • open: c/c++ の public と同じ
  • public: 別モジュールでは継承やオーバライドができない
  • fileprivate: c/c++ の private と同じ
  • internal: 同じモジュールのみアクセス可能

タグ:

+ タグ編集
  • タグ:
最終更新:2017年12月06日 17:04