0

sleep() に問題があります。「buttons:」と呼ばれる同じ IBAction に接続された 10 個の UIButtons があります。ここで、IBAction メソッドはすべてのボタンを無効にし、それらの背景色を赤に変えてから、「nextButtonToEnable」というメソッドを呼び出します。このメソッドは、最初に sleep(1) を持ち、次に 1 になるスイッチによって使用されるランダムな int を持ちます。ボタンが有効になり、赤ではなく青になります。問題は、すべてのボタンを押すと赤くなり、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.

4

3 に答える 3

1

あなたはおそらく使用すべきでperformSelector:withObject:afterDelay:あり、sleep()

于 2012-06-10T13:37:19.077 に答える
0
#include <stdlib.h>

それはあなたの問題を解決します。

于 2012-08-11T11:00:28.253 に答える
0

sleep()は非推奨です。Sleep()代わりに使用してください (大文字の S)

プロセスを 1 秒間スリープさせたい場合は、次のようにする必要があります。

Sleep(1000);

ここで、1000 はミリ秒です

于 2012-06-10T13:27:46.303 に答える