-1

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

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


片段:

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];
                     });
}
4

2 回答 2

2

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

你需要做的是把它放在一个方法中, remove UIViewAnimationOptionRepeat,然后在 UIView 动画中添加一个完成块,再次调用该方法。

于 2013-03-23T20:05:01.397 回答
-2

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

  • 不需要做for循环
  • 不需要做 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 是您的背景颜色占位符视图。

免责声明:背景颜色作为动画属性本身可能有更好的解决方案。这只是为了让您免于对 GCD 的未知数,以防您可能在不知道为什么要以这种方式使用它的情况下使用它。

于 2013-03-23T18:39:10.297 回答