在我的应用程序中,我有一个UIProgressView,显示两个NSDate之间的时间 . 一切正常,每分钟通过UIProgressView每分钟提前0.1 .
两个日期之间的差异用CGFloat以这种方式计算
除了我有一个UIButton它应该具有“减少ProgressView 0.1”的功能每次按下按钮几句话我想花一分钟到我之前创建的两个NSDate之间的差异 . 我做了几次尝试,但我无法得到这个,因为当我的应用程序关闭然后重新打开时,两个日期之间的时差不会改变......我怎么能这样做?
我告诉你我正在使用的代码
-(void)viewDidLoad {
[super viewDidLoad];
[self startDate];
}
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self upgradeEnergyBar];
[NSTimer scheduledTimerWithTimeInterval: (1 * 60)
target:self
selector:@selector(upgradeEnergyBar)
userInfo:nil
repeats:YES];
}
-(void)startDate {
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
if (! [defaults boolForKey:@"notFirstRun"]) {
NSDate *date = [NSDate new];
[[NSUserDefaults standardUserDefaults] setObject:date forKey:@"open"];
NSLog(@"Ora di apertura : %@", date);
[defaults setBool:YES forKey:@"notFirstRun"];
}
}
- (IBAction)sfAction:(id)sender {
//Decrement CGFLOAT
}
-(void)upgradeEnergyBar {
self.now = [NSDate new];
NSDate *lastDate = [[NSUserDefaults standardUserDefaults] objectForKey:@"open"];
NSTimeInterval timeInterval = [self.now timeIntervalSinceDate:lastDate];
_minutes = timeInterval / 60;
_energyBar.progress = _minutes * 0.1;
[self updateLabelEnergyWithProgress:_energyBar.progress];
_minute.text = [NSString stringWithFormat:@"MINUTES:%ld", (long) _minutes];
NSLog(@"MINUTES:%ld", (long) _minutes);
if (_energyBar.progress == 1) NSLog(@"end");
}
1 回答
你似乎有几个问题,但要回答你的“如何减去一分钟”......
你真正想做的是 ADD 一分钟到你保存的日期 . 所以,在
sfAction:
你可以:Edit: 现在包含代码,以确保我们不会将保存的日期/时间增加到晚于当前日期/时间 .
边注...
持续读取/写入用户默认值并不是一个好主意 .
您应该在应用程序启动时(或者当它返回到前台时)读取值并将值保存在变量/属性中 .
当您的应用程序退出(或被发送到后台)时,您可以编写更新的值 .