2011-09-09 39 views
1

我是iphone开发新手,在阅读Apress.Beginning.Iphone4.Dev的过程中,不知道这是否是开发iphone应用程序的最佳方式。 那么我现在在第4章中,我已经完成了示例代码的实现,但是我想添加一个小模块。不断改变UIView背景颜色

  • 按钮叫迪斯科
  • 被按下时触摸的内心,将开始在不断变化的 self.view.backgroundColor随机值的100倍 for循环。

    我的问题是背景仅在IBAction连接到按钮 disco后完成,因此我只能看到一个颜色变化,而不是至少2个颜色变化。

我的怀疑是,该视图不会刷新/重新加载,直到IBAction完成,这个怀疑是否正确?

是否有可能实现我希望实现的功能, - 触摸按钮 - 背景颜色随机变化100次。

在此先感谢您并对新问题感到抱歉。 timex88

========================

谢谢大家,我得到这个工作的感谢您的指针。但不是100次,我让changeBgColor方法无限期地运行。

我注意到的是,虽然changeBgColor仍然运行,如果我再碰迪斯科 按钮,执行changeBgColor方法率变得更高,可以有人请解释一下原因吗?

再次感谢 天美时88

回答

0

可以使用NSTimer.set重复改变颜色的方法&调用此方法的NSTimer为YES.Then你的方法将被再次&再次

1
- (IBAction)changeColor:(id)sender 
{ 
    if (_timer == nil) 
    { 
    _changeColorCount = 0; 
    _timer = [NSTimer scheduledTimerWithTimeInterval:0.2 
               target:self 
              selector:@selector(colorTimerFired) 
              userInfo:nil 
              repeats:YES]; 
    } 
} 

- (void)colorTimerFired 
{ 
    if (_changeColorCount > 100) 
    { 
     [_timer invalidate]; 
     _timer = nil; 
    } 
    else 
    { 
     [view setBackgroundColor:newRandomColor]; 
     _changeColorCount++; 
    } 
} 
+0

对不起初始化,因为我对于新手,我想确认,在你的代码上面,如何以及在何处被_timer声明? , 再次感谢。 – timex88

+0

_timer是实例变量,因此您需要在@interface部分中声明它。 – Davyd

+0

您需要在@interface部分声明它:NSTimer * _timer ;.那里的定时器会每0.2秒调用一次colorTimerFired方法,所以在这个例子中,视图颜色会每秒改变5次。 100次后,通过调用[_timer invalidate]来停止定时器,将其从runloop中移除。此外,您取消了指针,所以下次按下按钮时,您可以运行另一个计时器。 – Davyd

0
称为

下面的代码迪斯科按钮,点击写

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1 
                target:self 
               selector:@selector(changeColor) 
               userInfo:nil 
               repeats:YES]; 

现在做一个新的方法如下,在.h文件声明int iviewDidLoad为0

- (void) changeColor 
{ 
    // code for color change; 
    i++; 
    if (i==100) 
    { 
    [timer invalidate]; 
    } 
} 
+0

谢谢,但应该NSTimer声明是一个指针, – timex88

+0

谢谢,但应该NSTimer声明是一个指针,NSTimer *计时器= [[NSTimer alloc] ......]; ,因为使用你的代码逐字,造成编译错误“无效的初始化程序” – timex88

+0

是的,我忘了,但这样做....即时编辑......并请继续接受答案... – DShah