sleep()不能像我预期的那样工作

时间:2012-06-10 13:24:16

标签: iphone xcode uibutton sleep uicolor

我在睡眠方面遇到了一些麻烦()。我有10个UIButtons连接到同一个名为“buttons:”的IBAction。现在,IBAction方法应该使所有按钮无法启用并将它们的背景颜色变为红色,然后调用一个名为“nextButtonToEnable”的方法,该方法首先有一个sleep(1),然后是一个随机的int,它由一个转为1的开关使用启用按钮和蓝色而不是红色。现在问题,我希望所有按钮在按下时变为红色,然后在1秒延迟后,另一个按钮将变为蓝色,但这不会发生,真正发生的是当我按下蓝色按钮时它会保持蓝色整个延迟1秒然后它变成红色而另一个按钮变成蓝色。

这是我的代码

·H:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController {
    IBOutlet UIButton *b1;
    IBOutlet UIButton *b2;
    IBOutlet UIButton *b3;
    IBOutlet UIButton *b4;
    IBOutlet UIButton *b5;
    IBOutlet UIButton *b6;
    IBOutlet UIButton *b7;
    IBOutlet UIButton *b8;
    IBOutlet UIButton *b9;
    IBOutlet UIButton *b10;
}
-(void)nextButtonToEnable;


@end

的.m:

-(IBAction)buttons:(id)sender {
b1.enabled = NO;
b2.enabled = NO;
b3.enabled = NO;
b4.enabled = NO;
b5.enabled = NO;
b6.enabled = NO;
b7.enabled = NO;
b8.enabled = NO;
b9.enabled = NO;
b10.enabled = NO;
b1.backgroundColor = [UIColor redColor];
b2.backgroundColor = [UIColor redColor];
b3.backgroundColor = [UIColor redColor];
b4.backgroundColor = [UIColor redColor];
b5.backgroundColor = [UIColor redColor];
b6.backgroundColor = [UIColor redColor];
b7.backgroundColor = [UIColor redColor];
b8.backgroundColor = [UIColor redColor];
b9.backgroundColor = [UIColor redColor];
b10.backgroundColor = [UIColor redColor];

[self nextButtonToEnable];
}

-(void)nextButtonToEnable {

sleep(1);

int nextButton = rand() % 10;

switch (nextButton) {
    case 0:
        b1.enabled = YES;
        b1.backgroundColor = [UIColor blueColor];
        break;
    case 1:
        b2.enabled = YES;
        b2.backgroundColor = [UIColor blueColor];
        break;
    case 2:
        b3.enabled = YES;
        b3.backgroundColor = [UIColor blueColor];
        break;
    case 3:
        b4.enabled = YES;
        b4.backgroundColor = [UIColor blueColor];
        break;
    case 4:
        b5.enabled = YES;
        b5.backgroundColor = [UIColor blueColor];
        break;
    case 5:
        b6.enabled = YES;
        b6.backgroundColor = [UIColor blueColor];
        break;
    case 6:
        b7.enabled = YES;
        b7.backgroundColor = [UIColor blueColor];
        break;
    case 7:
        b8.enabled = YES;
        b8.backgroundColor = [UIColor blueColor];
        break;
    case 8:
        b9.enabled = YES;
        b9.backgroundColor = [UIColor blueColor];
        break;
    case 9:
        b10.enabled = YES;
        b10.backgroundColor = [UIColor blueColor];
        break;

    default:
        break;
}
}

所以就像睡眠在b1.enabled = NO之间;和b1.backgroundColor = [UIColor redColor];。

我如何解决此问题,因为我在互联网上找不到任何东西。主要是因为我没有一个线索可以搜索:P。

3 个答案:

答案 0 :(得分:1)

您应该使用performSelector:withObject:afterDelay:而不是sleep()

答案 1 :(得分:0)

不推荐使用

sleep(),而是使用Sleep()(大写S)

如果您想让您的过程暂停1秒钟,您需要执行以下操作:

Sleep(1000);

其中1000是毫秒

答案 2 :(得分:0)

#include <stdlib.h>

这将解决您的问题。