首先,我是这个Xcode / Objective-C的新手,所以对我来说很容易! :) 我制作了一个测试应用程序,按下一些按钮,背景会发生变化。我有一个红色,蓝色,绿色,白色,黑色和复活按钮。
我让应用程序通过按下所有颜色按钮来更改背景颜色。但是,我想让应用程序循环显示颜色,比如按下Revive按钮时非常快100倍。出于某种原因,它不起作用。
以下是无效的代码:
使用下面的代码,只会更改为最后一种颜色。
- (IBAction)Revive:(id)sender {
for (int y=0; y < 100; y++) {
view1.backgroundColor = [UIColor redColor];
view1.backgroundColor = [UIColor greenColor];
view1.backgroundColor = [UIColor blueColor];
view1.backgroundColor = [UIColor whiteColor];
view1.backgroundColor = [UIColor blackColor];
}
}
使用下面的代码,白色循环,应用程序从白色淡化为黑色
- (IBAction)Revive:(id)sender {
[UIView animateWithDuration:0.2 animations:^{
view1.backgroundColor = [UIColor redColor];
view1.backgroundColor = [UIColor greenColor];
view1.backgroundColor = [UIColor blueColor];
view1.backgroundColor = [UIColor whiteColor];
view1.backgroundColor = [UIColor blackColor];
}];
[UIView commitAnimations];
}
任何人都知道为什么会这样,并解决我的问题?
答案 0 :(得分:4)
这将有效:
- (void) doBackgroundColorAnimation {
static NSInteger i = 0;
NSArray *colors = [NSArray arrayWithObjects:[UIColor redColor], [UIColor greenColor], [UIColor blueColor], [UIColor whiteColor], [UIColor blackColor], nil];
if(i >= [colors count]) {
i = 0;
}
[UIView animateWithDuration:2.0f animations:^{
self.view.backgroundColor = [colors objectAtIndex:i];
} completion:^(BOOL finished) {
++i;
[self doBackgroundColorAnimation];
}];
}
答案 1 :(得分:1)
视图需要时间重绘,在第一个示例中,您已设置backgroundcolor,但视图不会重绘,直到您完成该方法。动画也是一样的,就像说下面这样:
int x = 0;
x = 5;
x = 6;
// why is x 6 ? :(
我会使用NSTimer循环显示颜色。