UIView backgroundColor颜色循环

时间:2011-06-05 07:58:48

标签: xcode uiview colors cycle background-color

首先,我是这个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];

}

任何人都知道为什么会这样,并解决我的问题?

2 个答案:

答案 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循环显示颜色。