0

蛍光灯が点灯するようなちらつき効果を作成したいと思います。このシーケンスには約 2 秒かかります。黒の背景にあるため(画像は白です)、次のような順序でアルファを調整できます。

0.5sec   Alpha = 1.0;
0.15sec  Alpha = 0.0;
0.4sec   Alpha = 1.0;
0.35sec  Alpha = 0.0;
0.3sec   Alpha = 1.0;
0.1sec   Alpha = 0.0;
~        Alpha = 1.0;

この時点で、アルファは 1.0 であり、id はそのままにしておきます。問題は、値を変更するだけでは描画のためにキューに入れられ、すぐには発生しないため、次回 UI が描画されるときに一度にすべてが発生し、ちらつき効果がなくなることです。

UIView.animate ブロックも使用できません。これは、指定された時間にわたってビューのアルファをトゥイーン/アニメーション化するためです。滑らかにしたくないので、アルファ レベル間で即座にちらつきたいです。

UIImageView イメージ フレーム アニメーションを使用することもできますが、よりクリーンで高速で簡単な方法があるのではないかと考えていました。

4

1 に答える 1

2

NSTimer を使用します。これは私がすることです(疑似コード):

timer = new scheduledTimer(0.5 seconds) selector:flicker() repeats:YES;
timeSpent = 0;

    flicker()
    {
        timeSpent+= 5;
        switch(seconds)
             case 5: alpha = 1.0; break;
             case 15: alpha = 0.0; break;
    ...
        case 120: alpha = 1.0; [timer invalidate]; break;

    }

ちらつきにパターンがある場合は、長いスイッチよりも優れたものを作成でき、おそらく次のようなものがありますif (timeSpent % 5 == 0) { alpha = 1.0; } else { alpha = 0.0; }

編集:次のようなものはどうですか:

CAKeyframeAnimation* animation = [CAKeyframeAnimation animationWithKeyPath: @"opacity"];
    animation.duration = 0.7f;
    animation.values   = [NSArray arrayWithObjects:
                          [NSNumber numberWithFloat:1.0f],
                          [NSNumber numberWithFloat:1.0f],
                          [NSNumber numberWithFloat:0.0f],
                          [NSNumber numberWithFloat:0.0f],
                          [NSNumber numberWithFloat:1.0f],

                          [NSNumber numberWithFloat:1.0f],
                          [NSNumber numberWithFloat:0.0f],
                          [NSNumber numberWithFloat:0.0f],
                          [NSNumber numberWithFloat:1.0f],
                          [NSNumber numberWithFloat:1.0f],

                          [NSNumber numberWithFloat:0.0f],
                          [NSNumber numberWithFloat:0.0f],
                          [NSNumber numberWithFloat:1.0f],
                          nil];
    animation.keyTimes = [NSArray arrayWithObjects:
                          [NSNumber numberWithFloat:0.1f],
                          [NSNumber numberWithFloat:0.2f],
                          [NSNumber numberWithFloat:0.2f],
                          [NSNumber numberWithFloat:0.3f],
                          [NSNumber numberWithFloat:0.3f],

                          [NSNumber numberWithFloat:0.4f],
                          [NSNumber numberWithFloat:0.4f],
                          [NSNumber numberWithFloat:0.5f],
                          [NSNumber numberWithFloat:0.5f],
                          [NSNumber numberWithFloat:0.6f],

                          [NSNumber numberWithFloat:0.6f],
                          [NSNumber numberWithFloat:0.7f],
                          [NSNumber numberWithFloat:0.7f],
                          nil];    

    [self.view.layer addAnimation:animation forKey:nil];   
于 2012-07-23T11:27:25.710 に答える