UIView 背景颜色颜色循环

Posted

技术标签:

【中文标题】UIView 背景颜色颜色循环【英文标题】:UIView backgroundColor color cycle 【发布时间】:2011-09-08 15:47:28 【问题描述】:

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


有人知道为什么会发生这种情况并解决我的问题吗?

【问题讨论】:

【参考方案1】:

视图需要时间来重绘,在第一个示例中,您设置了背景色,但在您完成该方法之前,视图不会重绘。动画也是一样的,就像在说:

int x = 0;
x = 5;
x = 6;
// why is x 6 ? :(

我会使用 NSTimer 循环显示颜色。

【讨论】:

【参考方案2】:

这将起作用:

- (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];
    ]; 


【讨论】:

这显然行不通,setNeedsDisplay 告诉绘图系统它需要在下一个绘图周期更新视图,如果你让主线程休眠,那么这个周期永远不会发生 您好,感谢您的及时答复。我看到你使用了一个函数。如何在 Header 文件中声明这个? 我得到一个 doBackgroundAnimation 未声明的错误,虽然我已经在 .h 文件中声明了这个函数: -(void) doBackgroundAnimation;有什么帮助吗? @MaleBuffy 方法被称为-doBackgrounColorAnimation。更正你的拼写,它应该可以工作。我已经测试过了。 还是没有运气。它仍然说 doBackgroundColorAnimation 未声明。我认为我没有正确声明该方法。我到底要在哪里申报?在@界面中?还是外面?确切的语法?伙计,这比我想象的要难。

以上是关于UIView 背景颜色颜色循环的主要内容,如果未能解决你的问题,请参考以下文章

iOS:从运行循环外部设置 UIView 背景颜色

UIView 背景颜色比 UICollectionView 背景颜色深

iPhone:UIImage 背景颜色与 UIView 背景颜色不同

UiView背景颜色不同[重复]

UIView背景颜色动画用不同的颜色

UIView 背景颜色总是黑色