iOS - 随机动画颜色

时间:2013-03-23 17:17:10

标签: ios objective-c animation uiview

我正在动画一些子视图,动画的其中一个步骤是更改视图背景颜色。但是,尽管我有一个返回随机颜色的函数,但一旦设置了背景颜色,在动画定义期间,它不再调用我的函数来获得另一种颜色。

有没有什么方法可以在每次动画执行时强制动画调用我的函数?


段:

for (UIView* subView in self.view.subviews) {
    dispatch_async(dispatch_get_main_queue(), ^{
                    [UIView animateWithDuration:1.0f
                          delay:0.0f
                        options: UIViewAnimationOptionRepeat
                     animations:^{
                         subView.backgroundColor = getRandomColor();
                     }
                     completion:nil];
                     });
}

2 个答案:

答案 0 :(得分:2)

getRandomColor();只会被调用一次,subView会将其背景颜色设置为每1秒生成一次该颜色(因此它会根据原始背景颜色设置动画颜色,然后设置为相同颜色的动画每1秒钟。

您需要做的是将其放入方法中,删除UIViewAnimationOptionRepeat,然后将完成块添加到再次调用该方法的UIView动画中。

答案 1 :(得分:-2)

如果你想要的只是切换背景颜色,这是另一种方法:

  • 无需循环
  • 无需执行dispatch_async

    NSArray *animationImages = [[NSArray alloc] initWithObjects:
    [UIImage imageNamed:@"image1.png"],    
    [UIImage imageNamed:@"image2.png"],
        ....
    [UIImage imageNamed:@"imagen.png"], nil];
    
    self.imageView.animationImages=animationImages;
    self.imageView.animationDuration=1.0;  //set duration
    [self.imageView startAnimating];
    

每个image1..imageN.png都是您想要的颜色,imageView是背景颜色的占位符视图。

免责声明:有可能将backgroundcolor作为可动画属性本身提供更好的解决方案。这只是为了让您远离GCD的未知因素,以防您在不知道自己使用它的原因的情况下使用它。