使UIImageView不透明度(alpha)随机变化

时间:2015-03-21 03:59:39

标签: ios objective-c uiimageview caanimation

我是编码世界的新手,我试图在我的项目中模拟闪烁的灯光效果,为此我在顶部有一个背景图像(image1)和另一个图像(image2)它的。

我想让图像2的不透明度随机变化,但我无法弄清楚如何使不透明度随机闪烁无限次,我尝试使用UIView动画但没有成功。

[self.view addSubview: image1];
[image1 addSubview: image2]; 

[UIView animateWithDuration:0.2f
                      delay:1.0f
                    options:  UIViewAnimationOptionCurveEaseIn
                 animations:^(void) {
                    image2.alpha = 0.0
                   }
                 completion:^(BOOL finished){
                    image2.alpha = 1.0
                  }];

非常感谢任何帮助。

谢谢

2 个答案:

答案 0 :(得分:3)

使用以下UIViewAnimationOptions重复动画并自动反转:

UIViewKeyframeAnimationOptionAutoreverse | UIViewKeyframeAnimationOptionRepeat

要使闪烁随机化,您可以使用arc4random函数随机化持续时间或延迟:

CGFloat duration = arc4random() % 3 + 1

示例:

[UIView animateWithDuration: duration
                  delay:1.0f
                options:  UIViewKeyframeAnimationOptionAutoreverse | UIViewKeyframeAnimationOptionRepeat
             animations:^(void) {
                image2.alpha = 0.0
               }
             completion:^(BOOL finished){
              }];

这将使用初始随机值重复动画(每次都不会随机化)。

如果您希望每次都使用随机值重复此操作,则需要删除UIViewKeyframeAnimationOptionRepeatUIViewKeyframeAnimationOptionAutoreverse并执行一些操作。创建一个函数来生成动画(生成随机变量等),而在完成块上调用函数来生成随机值并再次运行动画。

示例:

-(void)generateFlicker
{

[UIView animateWithDuration:0.5
                      delay:0.0f
                    options:nil
                 animations:^(void) {
                     self.view.alpha = (arc4random() % 100)/100.0f; //generates random number 0.0 to 1.0
                 }
                 completion:^(BOOL finished){
                     [self generateFlicker];
                 }];
   }

这会产生一个从0.0到1.0的随机数并将alpha设置为该值,完成然后调用自身并将alpha设置为新生成的值。

如果要生成随机延迟,持续时间或其他值,您可以在动画之前生成随机变量,并且每次运行时都会调用该函数。

答案 1 :(得分:1)

要随机化视图的alpha,您必须在 0.o到1.0 之间生成随机浮点数:

#define ARC4RANDOM_MAX      0x100000000

float random_alpha = ((float)arc4random() / ARC4RANDOM_MAX); //use this within animation loop.

更多细节here

示例:

[UIView animateWithDuration: 1.0
                  delay:1.0f
                options:  UIViewKeyframeAnimationOptionAutoreverse | UIViewKeyframeAnimationOptionRepeat
             animations:^(void) {
                float random_alpha = ((float)arc4random() / ARC4RANDOM_MAX);
                some_image.alpha = random_alpha;
               }
             completion:^(BOOL finished){
              }];