初期化は普通initメソッド内でやるが、自作のViewクラスの場合、
XIBファイルからinitWithCoderが実行されて初期化されることが多い。
そうすると、初期化に必要な引数をinitメソッドに渡せない。
よって親ビューコントローラのviewDidLoad内でセッターを使ってインスタンス変数の初期化を行うことになる。
まとめ
・initメソッド内でやること
インスタンス変数にインスタンスを作って代入する。
複数回実行されたくない、または1回実行すれば十分な処理。例えば以下
- (void)commonInit { self.layerForShadow = [CALayer layer]; // インスタンスを作って代入 self.layerForShadow.shadowOffset = CGSizeMake(2.5, 2.5); // デフォルト値 self.layerForShadow.shadowColor = [[UIColor blackColor] CGColor]; self.layerForShadow.shadowOpacity = 0.5; self.layerForShadow.backgroundColor = [UIColor blackColor].CGColor; [self.layer addSublayer:self.layerForShadow]; // 複数回実行されたくない処理 self.layer.masksToBounds = YES; }
その他必須の設定項目をすべて引数に取るセッターを作るとわかりやすいかも。
- (void)setFrame:(CGRect)frame cornerRadius:(CGFloat)cornerRadius centerColor:(UIColor *)centerColor sideColor:(UIColor *)sideColor minHandle:(DoubleSliderHandle *)minHandle maxHandle:(DoubleSliderHandle *)maxHandle{ self.frame = frame; self.layer.cornerRadius = cornerRadius; self.centerColor = centerColor; self.sideColor = sideColor; self.minHandle = minHandle; self.maxHandle = maxHandle; self.layerForShadow.frame = CGRectMake(-2.5, -self.frame.size.height, self.frame.size.width, self.frame.size.height); }
↑が実質的なイニシャライザ。親ビューコントローラのviewDidLoadで実行する。