从当前时间起每 5 分钟更新一次 UIProgressView

Update UIProgressView each 5 Minutes from current Time

在我的应用程序中,我有一个 UIProgressView 需要每 5 分钟增加 +0.1。这样做的方法,但我知道我有问题,因为我想计算 progressview 五分钟,即使我的应用程序关闭时应该依赖实时(iphone 时钟)而不是当我的应用程序是开放的...我会解释

  1. 我打开我的应用程序并开始计算分钟数
  2. 然后我关闭我的应用程序
  3. 我在 10 分钟后打开我的应用程序
  4. 我的观看进度值应为 +0.2(每 5 分钟 0.1)

我知道要做到这一点我应该使用 NSDate 但无法以正确的方式实现它,有人可以帮我举个例子来更好地理解如何实现吗?

谢谢大家

简而言之,我要寻找的是 uiprogressview 的增加必须从时钟 iphone 分钟获得......如果应用程序打开或关闭,这必须发生......只是再过一分钟,uiprogressview 必须更改。 ..简而言之,这应该是来自用户的恢复能量

在应用启动时或您希望进度开始时,存储当前时间:

let startTime = NSDate()

然后刷新(可以通过定时器设置每隔几分钟触发一次,或者在 viewDidAppear() 中触发):

let timeDelta = Date().timeIntervalSince(startTime)
progressBar.progress =  timeDelta/(60 * 5) * 0.1

更新: 听起来 OP 需要知道如何保持应用程序终止和新启动之间的进度开始时间。与其他答案一样,您可以使用 UserDefaults 并检查开始时间是否已经存在。如果存在则使用它,否则创建一个新条目,如下所示:

let userDefaultKey = "startTime"
var startTime = UserDefaults.standard.object(forKey: userDefaultKey)
if (startTime == nil)
{
   startTime = Date()
   UserDefaults.standard.set(startTime, forKey: userDefaultKey)
}

我认为你应该:

  1. 将开始日期存储在某个变量中:NSDate *startDate = [NSDate new];

将实际开始日期保存到 NSUserDefaults:

[[NSUserDefaults standardDefaults] setObject: startDate forKey: @"MyKey"];

  1. 接下来,当您的应用程序激活时,从 NSUserDefaults 获取日期,计算保存日期和实际日期之间的时间间隔:

NSTimeInterval secondsBetween = [[NSDate new] timeIntervalSinceDate: savedDate];

  1. 现在你可以将结果除以你的进度间隔(我猜在 ViewWillAppear):

progress = secondsBetween/(5*60) * 0.1

如果你想在你的 ViewController 处于活动状态时在每个时间单位后刷新你的进度,你应该使用 NSTimer:

[NSTimer scheduledTimerWithTimeInterval: (5 * 60)
    target:self
    selector:@selector(refreshProgressMethod)
    userInfo:nil
    repeats:YES];