2011-06-09 67 views
3

是否有任何方法可以立即更改窗口的背景颜色?如何强制iOS立即更改背景颜色?

我需要一个闪烁的背景,即红色/绿色以一秒的间隔闪烁。正如我所看到的,背景颜色不会立即改变,但只有当功能被留下时。

有没有办法强制系统改变它并立即重画窗口的背景?

+1

如果您觉得答案是正确的,请接受它。以便其他人可以轻松地参考。 :) – 2011-06-09 11:11:46

回答

4

纳文给了一个很好的第一次启动,但您可以通过动画颜色变化显示出多一点的类。

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    // Set up the initial background colour 
    self.view.backgroundColor = [UIColor redColor]; 

    // Set up a repeating timer. 
    // This is a property, 
    self.changeBgColourTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(changeColour) userInfo:nil repeats:YES]; 
} 

- (void) changeColour { 
    // Don't just change the colour - give it a little animation. 
    [UIView animateWithDuration:0.25 animations:^{ 
     // No need to set a flag, just test the current colour. 
     if ([self.view.backgroundColor isEqual:[UIColor redColor]]) { 
      self.view.backgroundColor = [UIColor greenColor]; 
     } else { 
      self.view.backgroundColor = [UIColor redColor]; 
     } 
    }]; 

    // Now we're done with the timer. 
    [self.changeBgColourTimer invalidate]; 
    self.changeBgColourTimer = nil; 
} 
+0

你如何/在哪里定义changeBgColourTimer? – xmux 2013-04-24 20:44:32

+0

第9行代码片段,它开始'self.changeBgColourTimer = ...' – Abizern 2013-04-24 21:18:55

+0

我得到这个错误:Property'changeBgColourTimer'找不到'Viewcontroller'类型的对象,对不起,我是完全新手,只是尝试在您的代码 – xmux 2013-04-24 21:26:07

6
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    flag = YES; 
    NSTimer *mTimer = [NSTimer scheduledTimerWithTimeInterval:.5 
                 target:self 
                selector:@selector(changeColor) 
                userInfo:nil 
                 repeats:YES]; 
} 

- (void)changeColor 
{ 
    if (flag == YES) 
    { 
     self.view.backgroundColor = [UIColor redColor]; 
     flag = NO; 
     return; 
    } 
    self.view.backgroundColor = [UIColor blueColor]; 
    flag = YES; 

}