我正在尝试添加一个计时器,当用户点击按钮时,它会启动计时器24小时,并在接下来的24小时内禁用该按钮。之后再次启用它。对于类似的事情,有一些答案,但在SWIFT中这样做并不是100%有用。
我遇到的主要问题是我希望这是针对每个用户的。所以每次点击一个用户需要24小时。例如:如果我喜欢某种东西,那么你希望能够在24小时内再次“喜欢”那个特定的东西,但仍然可以“喜欢”不同的东西吗?
由于
答案 0 :(得分:4)
*
*
我有一个每日视频广告,我的用户可以查看以获得额外的现金。这是我用来确保他们每天只能查看一次。
1。)创建一个在用户触发时调用的函数。
func set24HrTimer() {
let currentDate = NSDate()
let newDate = NSDate(timeInterval: 86400, since: currentDate as Date)
UserDefaults.standard.setValue(newDate, forKey: "waitingDate")
print("24 hours started")
//disable the button
}
2。)在文件顶部创建一个变量。
let todaysDate = NSDate()
3。)在viewDidLoad
或didMoveToView
来电:
if let waitingDate:NSDate = UserDefaults.standard.value(forKey: "waitingDate") as? NSDate {
if (todaysDate.compare(waitingDate as Date) == ComparisonResult.orderedDescending) {
print("show button")
}
else {
print("hide button")
}
}
答案 1 :(得分:2)
您可以设置实际日期+ 1 day
并将其保存到NSUserDefaults
:.
因此,在您按下按钮的方法中,您可以执行以下操作:
//user pressed button:
func buttonPressed(){
//current date
let currentDate = NSDate()
let calendar = NSCalendar.currentCalendar()
//add 1 day to the date:
let newDate = calendar.dateByAddingUnit(NSCalendarUnit.CalendarUnitDay, value: 1, toDate: currentDate, options: NSCalendarOptions.allZeros)
NSUserDefaults.standardUserDefaults().setValue(newDate, forKey: "waitingDate")
//disable the button
}
并检查您可以检索信息的时间。我建议在AppDelegate
方法中查看applicationDidFinishLaunchingWithOptions
。
//call it whereever you want to check if the time is over
if let waitingDate:NSDate = NSUserDefaults.standardUserDefaults().valueForKey("waitingDate") as? NSDate{
let currentDate = NSDate()
//If currentDate is after the set date
if(currentDate.compare(waitingDate) == NSComparisonResult.OrderedDescending){
//reenable button
}
}
答案 2 :(得分:0)
首先要考虑的一些事项。
这个按钮无法被破坏有多重要?
如果您依赖于设备的当前时间和日期,那么用户始终可以在设备设置中将其向前移动一天。
您是否希望在您的应用程序之外发生任何行为?
应该通知用户该按钮现已启用
假设您不需要严格执行24小时,并且您不想通知用户(他们可以找到他们何时返回您的应用),那么您只需要做一个很少的东西。
按下按钮时获取timeStamp,启动NSTimer 24小时,并将timeStamp保存到NSUserDefaults。
//Assuming you have a method named enableButton on self
let timer = NSTimer.scheduledTimerWithTimeInterval(86400, target: self, selector: "enableButton", userInfo: nil, repeats: false)
NSUserDefaults.standardUserDefaults().setObject(NSDate(), forKey: "timeStamp")
现在,如果用户永远不会离开您的应用,那么您的好处。在现实生活中他们会这样做,所以如果你需要根据timeStamp禁用按钮,你将需要检查你何时重新进入你的应用程序,并开始一个新的计时器剩下的时间。