iOS-随机动画颜色

iOS-随机动画颜色,ios,objective-c,animation,uiview,Ios,Objective C,Animation,Uiview,我正在为一些子视图设置动画,动画的一个步骤是更改视图背景色。但是,尽管我有一个返回随机颜色的函数,但一旦设置了背景颜色,在动画定义过程中,它不会再次调用我的函数来获得另一种颜色 是否有某种方法可以强制动画在每次执行动画时调用我的函数 片段: for (UIView* subView in self.view.subviews) { dispatch_async(dispatch_get_main_queue(), ^{ [UIView anima

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

是否有某种方法可以强制动画在每次执行动画时调用我的函数


片段:

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

如果您只想切换背景色,以下是另一种方法:

  • 不需要为循环做任何事情
  • 无需执行异步调度

    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,以防您可能在不知道为什么要这样使用它的情况下使用它。

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


您需要做的是将其放入一个方法中,删除
UIViewAnimationOptionRepeat
,并向UIView动画添加一个完成块,以再次调用该方法。

能否向我们显示您当前正在尝试的代码?问题是,一旦为动画设置了颜色,当它重复动画时,它不再调用我的函数来获得另一种颜色。我希望每次动画重复时,它都以不同的颜色重复。可以尝试将getRandomColor()的输出分配到UIView动画块外部的UIColor变量中,然后将背景颜色设置为动画块内部的该变量吗?根据这一点:-尝试使用subview.layer而不是subview播放。如果GCD没有犯规的话,它似乎是这样工作的。它还没有工作,甚至没有为图层而不是UIView本身制作动画。但是删除重复选项,是否仍然可以以某种方式制作连续动画?@MauricioZambon是的,使用递归函数或相互依赖的块。工作起来很有魅力。将动画块放在函数中,并在完成块中重新调用它可以解决问题。这是一个糟糕的解决方案。你不使用图像来着色,只是不。根据需要,解决方案可以是好的,也可以是坏的。“你不使用”-声明性语句。“你只是不用勺子挖地基?”经典完美的东西并不总是好的解决方案。不总是,是的。此外,声明性陈述并没有给进一步的回答增加任何质量。如果可以的话,用一些真正好的东西来启发我,我洗耳恭听。