使用NSTimer。這就是我會做(僞代碼):如果你有一些模式來忽悠你可以做的東西不是很長的開關更好,也許只是有一些像if (timeSpent % 5 == 0) { alpha = 1.0; } else { alpha = 0.0; }
編輯
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;
}
:如何關於這樣的事情:
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];
這不會工作,因爲改變alpha(或任何視圖的任何屬性)直到UI線程重繪它纔會生效。我可以在每個之後調用SetNeedsDisplay(),但仍不能保證它會立即發生。結果是所有更改都一次應用,不會導致動畫/閃爍。如果長時間的變化(比如0.5秒+),這將起作用,但是如果試圖模擬熒光燈開啓時的閃爍,一些閃爍會很短(約0.1秒)。 – Dermot 2012-07-23 11:41:56
好的,CAKeyframeAnimation怎麼樣?查看我編輯回答中的示例。 – vakio 2012-07-23 12:37:46
將KeyFrameAnimation的CalculationMode屬性設置爲CAKeyFrameAnimation.CalculationDiscrete以防止值插值。它是線性的。 – 2012-07-23 12:41:05