gpt4 book ai didi

objective-c - 根据 NSTimer 更新 UILabel

转载 作者:行者123 更新时间:2023-11-30 19:22:08 29 4
gpt4 key购买 nike

我有一个 UILabel,我想将其更新为倒计时器。目前,我正在使用 NSTimer 在分配的不活动时间过后执行一个方法。我从 this SO thread 找到了设置所需 NSTimer 的代码。我在应用程序的 View Controller 之一中使用 Chris Miles 发布的示例代码,并且当空闲时间达到 kMaxIdleTimeSeconds 时,该方法正在正确执行。 .

但是,我希望通过使用剩余空闲时间更新 View Controller 中的 UILabel,进一步采用 Chris Miles 发布的代码示例。我应该使用完全独立的 NSTimer 来执行此操作,还是有办法在注销之前更新 UILabel,并使用当前 NSTimer 剩余的空闲时间?

应用程序的 View Controller 实现文件如下所示,

#import "ViewControllerCreate.h"
#import "math.h"

@interface ViewControllerHome ()

#define kMaxIdleTimeSeconds 20.0

@implementation ViewControllerHome

@end

- (void)viewDidLoad
{

// 5AUG13 - idle time logout
[self resetIdleTimer];

int idleTimerTime_int;

idleTimerTime_int = (int)roundf(kMaxIdleTimeSeconds);

_idleTimerTime.text = [NSString stringWithFormat:@"%d secs til",idleTimerTime_int];

}

- (void)viewDidUnload
{
[self setIdleTimerTime:nil];
// set the idleTimer to nil so the idleTimer doesn't tick away on the welcome screen.
idleTimer = nil;
[super viewDidUnload];
}

#pragma mark -
#pragma mark Handling idle timeout

- (void)resetIdleTimer {
if (!idleTimer ) {
idleTimer = [NSTimer scheduledTimerWithTimeInterval:kMaxIdleTimeSeconds
target:self
selector:@selector(idleTimerExceeded)
userInfo:nil
repeats:YES];
}
else {
if(fabs([idleTimer.fireDate timeIntervalSinceNow]) < kMaxIdleTimeSeconds-1.0) {
[idleTimer setFireDate:[NSDate dateWithTimeIntervalSinceNow:kMaxIdleTimeSeconds]];
}
}
}

- (void)idleTimerExceeded {
NSLog(@"lets see what happens");
[idleTimer invalidate];
[self logout:nil];
[self resetIdleTimer];
}

// method is fired when user touches screen.
- (UIResponder *)nextResponder {
[self resetIdleTimer];
return [super nextResponder];
}

@end

最佳答案

我根本不会使用您发布的代码。为什么不以最大空闲时间启动标签,然后每秒调用一次计时器的操作方法,并从标签文本的 intValue 中减去 1。当标签的值达到 0 时,执行您需要执行的操作,并使计时器无效。

类似这样的事情:

- (void)viewDidLoad {
[super viewDidLoad];
self.label.text = @"1000";
[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(countDown:) userInfo:nil repeats:YES];
}

-(void)countDown:(NSTimer *) aTimer {
self.label.text = [NSString stringWithFormat:@"%d",[self.label.text intValue] - 1];
if ([self.label.text isEqualToString:@"0"]) {
//do whatever
[aTimer invalidate];
}
}

关于objective-c - 根据 NSTimer 更新 UILabel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18087750/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com