从当前时间起每 5 分钟更新一次 UIProgressView
Update UIProgressView each 5 Minutes from current Time
在我的应用程序中,我有一个 UIProgressView 需要每 5 分钟增加 +0.1。这样做的方法,但我知道我有问题,因为我想计算 progressview 五分钟,即使我的应用程序关闭时应该依赖实时(iphone 时钟)而不是当我的应用程序是开放的...我会解释
- 我打开我的应用程序并开始计算分钟数
- 然后我关闭我的应用程序
- 我在 10 分钟后打开我的应用程序
- 我的观看进度值应为 +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)
}
我认为你应该:
- 将开始日期存储在某个变量中:
NSDate *startDate = [NSDate new];
将实际开始日期保存到 NSUserDefaults:
[[NSUserDefaults standardDefaults] setObject: startDate forKey: @"MyKey"];
- 接下来,当您的应用程序激活时,从 NSUserDefaults 获取日期,计算保存日期和实际日期之间的时间间隔:
NSTimeInterval secondsBetween = [[NSDate new] timeIntervalSinceDate: savedDate];
- 现在你可以将结果除以你的进度间隔(我猜在
ViewWillAppear
):
progress = secondsBetween/(5*60) * 0.1
如果你想在你的 ViewController 处于活动状态时在每个时间单位后刷新你的进度,你应该使用 NSTimer:
[NSTimer scheduledTimerWithTimeInterval: (5 * 60)
target:self
selector:@selector(refreshProgressMethod)
userInfo:nil
repeats:YES];
在我的应用程序中,我有一个 UIProgressView 需要每 5 分钟增加 +0.1。这样做的方法,但我知道我有问题,因为我想计算 progressview 五分钟,即使我的应用程序关闭时应该依赖实时(iphone 时钟)而不是当我的应用程序是开放的...我会解释
- 我打开我的应用程序并开始计算分钟数
- 然后我关闭我的应用程序
- 我在 10 分钟后打开我的应用程序
- 我的观看进度值应为 +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)
}
我认为你应该:
- 将开始日期存储在某个变量中:
NSDate *startDate = [NSDate new];
将实际开始日期保存到 NSUserDefaults:
[[NSUserDefaults standardDefaults] setObject: startDate forKey: @"MyKey"];
- 接下来,当您的应用程序激活时,从 NSUserDefaults 获取日期,计算保存日期和实际日期之间的时间间隔:
NSTimeInterval secondsBetween = [[NSDate new] timeIntervalSinceDate: savedDate];
- 现在你可以将结果除以你的进度间隔(我猜在
ViewWillAppear
):
progress = secondsBetween/(5*60) * 0.1
如果你想在你的 ViewController 处于活动状态时在每个时间单位后刷新你的进度,你应该使用 NSTimer:
[NSTimer scheduledTimerWithTimeInterval: (5 * 60)
target:self
selector:@selector(refreshProgressMethod)
userInfo:nil
repeats:YES];