在两个NSDate之间减去1分钟

时间:2017-03-23 14:09:53

标签: ios objective-c nsdate cgfloat

在我的应用程序中,我有一个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 个答案:

答案 0 :(得分:1)

你似乎有几个问题,但回答你的“如何减去一分钟”......

您真正想要做的是 ADD 一分钟到您保存的日期。所以,在sfAction:你可以:

- (IBAction)sfAction:(id)sender {

    // get the 'saved' date/time
    NSDate *lastDate = [[NSUserDefaults standardUserDefaults] objectForKey:@"open"];

    // add one minute (60 seconds)
    lastDate = [lastDate dateByAddingTimeInterval:60];

    // get the current date/time
    NSDate *now = [NSDate date];

    // use the earlier date/time (to avoid a date/time in the future)
    NSDate *earlier = [lastDate earlierDate:now];

    // save it back to User Defaults
    [[NSUserDefaults standardUserDefaults] setObject:earlier forKey:@"open"];

}

修改:现在包含代码,以确保我们不会将保存的日期/时间增加到晚于当前日期/时间。

旁注......

持续读取/写入用户默认值并不是一个好主意。

当应用程序启动时(或者当它返回到前台时)读取值并将值保存在变量/属性中。

当您的应用退出(或被发送到后台)时,您可以更新的值。