酒と泪とRubyとRailsと

Ruby on Rails と Objective-C は酒の肴です!

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

Eye Catch Image

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


実装方法

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

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

.h(ヘッダファイル)
1
2
3
4
5
6
7
@interface ViewController : UIViewController {
    UILabel *bLabel;
    BOOL needBlink;
    float blinkTextExceptRedDelta;
    float blinkTextExceptRedNum;
}
@end

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

.m(実装ファイル)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
- (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;
}

おすすめの書籍