SimpleCapを初めて使った時にボタンに気がつかないという意見が以前あった。
点滅させたり、横に流れるようなフラッシュをさせたりといろいろ試した結果、透明(alpha=0)から徐々に不透明(alpha=1.0)に変えていくのが雰囲気が良くて飽きがこない?ので、この方法を取る事にした。
静止画ではわかりにくいが徐々にボタンが明るくなっていく。
実装はボタンを管理する ThinBunttonクラスに startFlasher メソッドを追加し、各Handler起動時にこれを呼出すようにした。メソッドはこんな感じ。
//-----------------
// Flasher
//-----------------
#define FLASHER_INTERVAL 0.05
#define FLASHER_FRAMES 10.0
- (void)flasherAnimate:(NSTimer*)timer
{
// do it
[self setNeedsDisplay:YES];
_flasher_alpha += 1.0/FLASHER_FRAMES;
if (_flasher_alpha > 1.65) {
[timer invalidate];
_while_flasher = NO;
}
}
- (void)startFlasher
{
if (_while_flasher) {
return;
}
_flasher_alpha = 0.0;
_while_flasher = YES;
NSTimer* timer = [NSTimer timerWithTimeInterval:FLASHER_INTERVAL
target:self
selector:@selector(flasherAnimate:)
userInfo:nil
repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
}
drawRect: 内の描画処理で _flasher_alphaを使っている。_flasher_alphaを 1.65まで増やしている。alpha値は 1.0が最大値なのでこれを超えても透明度は変わらないのだがこうすることで1.0状態の表示を簡単な方法で長めに表示させることができる。