我是编码世界的新手,我试图在我的项目中模拟闪烁的灯光效果,为此我在顶部有一个背景图像(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
}];
非常感谢任何帮助。
谢谢
答案 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){
}];
这将使用初始随机值重复动画(每次都不会随机化)。
如果您希望每次都使用随机值重复此操作,则需要删除UIViewKeyframeAnimationOptionRepeat
和UIViewKeyframeAnimationOptionAutoreverse
并执行一些操作。创建一个函数来生成动画(生成随机变量等),而在完成块上调用函数来生成随机值并再次运行动画。
示例:强>
-(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){
}];