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

时间:2017-03-21 20:32:16

标签: ios objective-c xcode nsdate uiprogressview

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

  1. 我打开我的应用程序并开始计算分钟数
  2. 然后我关闭我的应用
  3. 我在10分钟后打开我的应用
  4. 我的观看进度值应为+0.2(每5分钟0.1次)
  5. 我知道要做到这一点我应该使用NSDate但不能以正确的方式实现它,有人可以通过一个例子来帮助我更好地理解如何实现它吗?

    谢谢大家

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

2 个答案:

答案 0 :(得分:1)

我认为你应该:

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

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

    1. 接下来,当您的应用程序处于活动状态时,请从NSUserDefaults获取日期,计算保存日期和实际日期之间的时间间隔:
    2. NSTimeInterval secondsBetween = [[NSDate new] timeIntervalSinceDate: savedDate];

      1. 现在您可以根据进度间隔(我猜在ViewWillAppear中)划分结果:
      2. progress = secondsBetween/(5*60) * 0.1

        如果您希望在ViewController处于活动状态后每个时间单位后刷新进度,则应使用NSTimer:

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

答案 1 :(得分:0)

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

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)
}