在计数器降低iOS时更新按钮UIImage



我试图每秒更改一个UIButton的UIImage,直到计数器达到0。我试过NSTimer,用Delay执行Selector,但我都无法让它们发挥作用,大量的谷歌搜索都给出了不同的选项,但指出了这样一个事实,即在for或while循环中,或者NSTimer正在运行时,我无法更新UI。

下面的代码让我接近尾声,日志显示执行暂停了一秒钟,imageName是正确的。。。。但是按钮图像没有改变。

非常感谢您的帮助。

- (void)setTimerCountdownImage {
		NSString *imageWithTime = @"recordTimer";
		UIImage *btnImage = [UIImage imageNamed:@"recordTimer.png"];
		if (_timerDelay != 0) {
				NSLog(@"Timer Delay is:%d", _timerDelay);
				btnImage = [UIImage imageNamed:[[imageWithTime stringByAppendingString:[NSString stringWithFormat:@"%d", _timerDelay]] stringByAppendingString:@".png"]];
				NSLog(@"TimerImage is: %@",[[imageWithTime stringByAppendingString:[NSString stringWithFormat:@"%d", _timerDelay]] stringByAppendingString:@".png"]);
				[_toggleTimerBtn setImage:btnImage forState:UIControlStateNormal];
				[self countDownTimer:_timerDelay];
	
		}
		else {
			[_toggleTimerBtn setImage:btnImage forState:UIControlStateNormal];
		}
}
-(void)countDownTimer:(int) currentDelay {
	_timerDelay = _timerDelay -1;
	NSLog(@"Time to sleep...");
	[NSThread sleepForTimeInterval:1.0];
	[self setTimerCountdownImage];
}

日志输出:

2015-02-17 01:42:22.357 SwingPlane〔299:16789〕定时器延迟为:5
2015-02-17 01:42:22.358 SwingPlane〔299:16789〕时间图片为:recordTimer5.png
2015-02-17 01:42:22.358摇摆飞机〔299:16789〕时间到睡眠
2015-02-17 01:42:23.360 SwingPlane〔299:16789〕定时器延迟是:4
2015-02-17 01:42:23.374摇摆飞机〔299:16789〕时间图片为:recordTimer4.png
2015-02-17 01:42:23.375摇摆飞机〔299:16789〕时间到睡眠
2015-02-17 01:42:24.377 SwingPlane〔299:16789〕定时器延迟是:3
2015-02-17 01:42:24.391摇摆飞机〔299:16789〕时间图片为:recordTimer3.png
2015-02-17 01:42:24.392摇摆飞机〔299:16789〕时间到睡眠
2015-02-17 01:42:25.394 SwingPlane〔299:16789〕定时器延迟是:2
2015-02-17 01:42:25.408摇摆飞机[299:16789]时间图片为:recordTimer2.png
2015-02-17 01:42:25.408摇摆飞机〔299:16789〕时间到睡眠
2015-02-17 01:42:26.411摇摆飞机〔299:16789〕定时器延迟是:1
2015-02-17 01:42:26.427 SwingPlane〔299:16789〕时间图片为:recordTimer1.png
2015-02-17 01:42:26.428摇摆飞机〔299:16789〕时间到睡觉

记住在主线程上进行所有UI更改。使用NSTimer!试试这个(我自己没有运行,如果不起作用,请告诉我):

- (void)startTimerWithDelay:(NSInteger)delay {
    _timerDelay = delay;
    _timer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(setTimerCountdownImage) userInfo:nil repeats:YES];
}

- (void)setTimerCountdownImage {
    NSString *imageWithTime = @"recordTimer";
    UIImage *btnImage = [UIImage imageNamed:@"recordTimer.png"];
    _timerDelay--;
    if (_timerDelay != 0) {
        btnImage = [UIImage imageNamed:[[imageWithTime stringByAppendingString:[NSString stringWithFormat:@"%d", _timerDelay]] stringByAppendingString:@".png"]];
    } else {
        [_timer invalidate];
    }
    dispatch_async(dispatch_get_main_queue(), ^{
        [_toggleTimerBtn setImage:btnImage forState:UIControlStateNormal];
    });
}

请记住将NSTimer *_timer添加到类中,否则它将不起作用。

最新更新