タッチした時にそのリアクションとしてボタンを少し暗くする処理を追加する。
タッチ開始イベント
今回 BezelButtonは UIControlから派生しているので beginTrackingWithTouch:withEvent: をオーバライドすればいい。押された状態を管理するインスタンス変数 pushed_ を用意しておき、これをタッチ開始・終了で書き換える。
- (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event { pushed_ = YES; [self setNeedsDisplay]; return YES; } - (void)endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event { pushed_ = NO; self.recessed = !self.recessed; [self setNeedsDisplay]; [super endTrackingWithTouch:touch withEvent:event]; }
状態が変わったら -[UIView setNeedsDisplay] で再描画してやる。
黒半透明の矩形
次にボタンを黒くする処理。これはタッチされた状態の時に黒半透明の角丸矩形を一番上(最後)に描画する。
if (pushed_) { CGContextAddPath(context, roundRectPath_); [[UIColor colorWithWhite:0.0f alpha:0.2f] setFill]; CGContextFillPath(context); }
角丸矩形は前回パス(CGPath)を作っておいたのでそれが使える。このため実質たった3行で済んだ。
さて実行してみよう。
タッチすると
暗くなる。
この状態でタッチしても
暗くなる。
いい感じだ。
Responses
Leave a Response