Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode-在for循环的每次迭代中更改按钮的图像_Xcode_Memory_For Loop - Fatal编程技术网

Xcode-在for循环的每次迭代中更改按钮的图像

Xcode-在for循环的每次迭代中更改按钮的图像,xcode,memory,for-loop,Xcode,Memory,For Loop,我正在创建一个记忆游戏,希望在for循环中每次迭代都更改四个按钮的图像。实际上,在循环的最后一次迭代之前,什么都不会发生 按下按钮时: - (IBAction)bNewRound:(id)sender { for (int i = 0; i < 10; i++) { numbers1[i] = arc4random()%4+1; NSLog(@"%i: %i", i, numbers1[i]); if (numbers1[i] == 1) { [s

我正在创建一个记忆游戏,希望在for循环中每次迭代都更改四个按钮的图像。实际上,在循环的最后一次迭代之前,什么都不会发生

按下按钮时:

- (IBAction)bNewRound:(id)sender {
for (int i = 0; i < 10; i++) {
    numbers1[i] = arc4random()%4+1;
    NSLog(@"%i: %i", i, numbers1[i]);

    if (numbers1[i] == 1) {
        [self b1On];
    }
    if (numbers1[i] == 2) {
        [self b2On];
    }
    if (numbers1[i] == 3) {
        [self b3On];
    }
    if (numbers1[i] == 4) {
        [self b4On];
    }
    sleep(1);
    }
}
(仅适用于按钮1,但您得到了它)

我按照日志中的代码进行操作,一切正常,每秒生成一个新的数字并保存在数组中,b1On方法(或b2On、b3On等)运行,但行

[self.button1 setBackgroundImage:[UIImage imageNamed:@"memory_green.png"] forState: UIControlStateNormal];
不会在每次迭代中更改图像。 但是当for循环结束时,数组中的最后一个(随机)按钮将变为绿色

为什么for循环的每次迭代都不更新图像

谢谢

  • 永远不要在主线程上使用
    sleep()
  • UI更新不会立即发生。它们发生在当前运行循环的末尾,这意味着在方法完成之后 你可以用一个计时器。像这样的方法应该会奏效:

    - (void)timerFired:(NSTimer *)timer {
        _timerCount--;
        if (_timerCount <= 0) {
            [timer invalidate];
        }
        // do something
    }
    
    - (void)startTimer {
        [_timer invalidate];
        _timerCount = 10;
        _timer = [NSTimer timerWithTimeInterval:1 target:self selector:@selector(timerFired:) userInfo:nil repeats:YES];
        [[NSRunLoop currentRunLoop] addTimer:_timer forMode:NSRunLoopCommonModes];
    }
    
    -(void)timerFired:(NSTimer*)计时器{
    _时间计数--;
    
    如果(_timerCount),我认为您应该在迭代中使用延迟。所以编译器是如此之快,这是您所期望的,需要时间才能生效。。
    - (void)timerFired:(NSTimer *)timer {
        _timerCount--;
        if (_timerCount <= 0) {
            [timer invalidate];
        }
        // do something
    }
    
    - (void)startTimer {
        [_timer invalidate];
        _timerCount = 10;
        _timer = [NSTimer timerWithTimeInterval:1 target:self selector:@selector(timerFired:) userInfo:nil repeats:YES];
        [[NSRunLoop currentRunLoop] addTimer:_timer forMode:NSRunLoopCommonModes];
    }