按顺序更改UIView的属性,但没有动画?

时间:2012-07-23 11:18:37

标签: objective-c ios animation xamarin.ios

我想创造一种闪烁效果,类似于荧光灯打开。序列大约需要2秒钟。由于它是在黑色背景上(并且图像是白色的),我可以按照以下顺序调整alpha:

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;

此时,alpha为1.0,id就像留在那里一样。问题是我不能只是改变这些值,因为它们只是排队等待绘图并且不会立即发生,而是下次绘制UI时它们都会立即发生,让我没有闪烁效果。 / p>

我也不能使用UIView.animate块,因为这会在指定的时间内对视图的alpha进行补间/动画处理,我不希望它平滑,我希望它能立即在alpha级别之间闪烁。

我可能会使用UIImageView图像框架动画,但是想知道是否有更清洁,更快速,更简单的方法?

1 个答案:

答案 0 :(得分: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];