我正在动画一些子视图,动画的其中一个步骤是更改视图背景颜色。但是,尽管我有一个返回随机颜色的函数,但一旦设置了背景颜色,在动画定义期间,它不再调用我的函数来获得另一种颜色。
有没有什么方法可以在每次动画执行时强制动画调用我的函数?
段:
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];
});
}
答案 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的未知因素,以防您在不知道自己使用它的原因的情况下使用它。