UILabelの文字を点滅[Objective-C]

Eye Catch Image

Objective-Cネタです。UILabelの文字を点滅をトライしてみました。
ググって探したのですが、スマートな方法が見つけられず…力技ですので、お見苦しいかも。もしもっといい方法があればぜひコメントをお願いします!


🏈 実装方法

白 <=> 赤に変化するUILabelのサンプルです。
点滅の方法としては、赤 <=> 白 の色の変化を時間とともに少しずつ行っています。

.h(ヘッダファイル)は以下のとおり。

@interface ViewController : UIViewController {
UILabel *bLabel;
BOOL needBlink;
float blinkTextExceptRedDelta;
float blinkTextExceptRedNum;
}
@end

.m(実装ファイル)は以下の通り。

- (void)viewDidLoad
{
[super viewDidLoad];
[self.view setBackgroundColor:[UIColor blackColor]];
blinkTextExceptRedNum = 0.0; //赤以外の色の初期値
blinkTextExceptRedDelta = 0.05; // 色変化の割合
needBlink = YES;
bLabel = [[UILabel alloc] init];
bLabel.frame = CGRectMake(90, 100, 140, 30);
[bLabel setTextAlignment:NSTextAlignmentCenter];
[bLabel setBackgroundColor:[UIColor clearColor]];
[bLabel setTextColor:[UIColor redColor]];
bLabel.text = @"test";
[self.view addSubview:bLabel];
// 文字の点滅処理
[NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(blinkUILabel) userInfo:nil repeats:NO];
}
// 文字の点滅処理
- (void)blinkUILabel
{
if (needBlink) {
//赤以外の色の値
float newExceptRedNum = blinkTextExceptRedNum + blinkTextExceptRedDelta;
// 赤以外の色が0未満か1より大になる場合は、反転させる
if (newExceptRedNum < 0 || newExceptRedNum > 1.0) {
blinkTextExceptRedDelta = blinkTextExceptRedDelta * (-1);
blinkTextExceptRedNum = blinkTextExceptRedNum + blinkTextExceptRedDelta;
} else {
blinkTextExceptRedNum = newExceptRedNum;
}
// この部分を変更すれば希望の色への変化も実現できると思います
UIColor *color = [UIColor colorWithRed:1.0 green:blinkTextExceptRedNum blue:blinkTextExceptRedNum alpha:1.0];
[bLabel setTextColor: color];
[self.view addSubview:bLabel];
[NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(blinkUILabel) userInfo:nil repeats:NO];
}
}
- (void)viewWillDisappear:(BOOL)blinkd
{
// 点滅を終了させる
needBlink = NO;
}

📚 おすすめの書籍

💩 欲しいものリスト公開しました