如何设置UIButton操作的每小时限制?

时间:2013-03-17 08:28:04

标签: ios objective-c uibutton nstimer

在我的应用中,我想限制特定UIButton(连接到动作方法)每小时按500次的次数。每次单击此按钮,都会获得一个虚拟点,我希望将用户可以获得的积分限制为500 /小时。

当达到500点限制时,我想用一条消息(一个UILabel)替换该按钮,该消息告诉用户他/她必须等待“0:XX”分钟。

我正在想象黑手党战争限制用户的方式。

我找到了这个similar thread,但它没有解释我特别想要的东西。

3 个答案:

答案 0 :(得分:2)

如何使Array存储您的button click历史记录

点击该按钮后,点按Time,然后将其添加到history array

你可以在当前Time之前检查Time阵列的哪个索引是500(如果不超过500,则意味着使用不应该等待。)

并计算Current Time500 Before Time

之间的持续时间

如果duration >= 1hour,什么也不做 ;否则duration < 1hour,启用按钮,然后返回(1小时 - 持续时间),返回持续时间是用户必须等待

答案 1 :(得分:0)

您要做的是拥有一个NSDate变量,当按下该按钮时,将其设置为[NSDate date](如果您希望它是第一次按下后的一小时,则只设置如果点击== 0)

然后你会想要一个NSTimer循环几秒钟或者你想要它准确无误,并检查[[NSDate date] timeIntervalSinceDate:firstDate]>3600是否会重置点击次数。

答案 2 :(得分:0)

如前所述,我会在NSDate *now = [NSDate date];

上制定解决方案

在每个按钮上单击,在action方法中,您将创建一个这样的日期对象并将其添加到数组(该数组是类属性或类内部变量)。

NSMutableArray *clicksOf60Minutes;  // can be initialized with alloc/initWithCapacity:501;

容量可能是550左右。做一些测试并寻找合适的价值。这是性能和内存管理的问题。无论您为初始化选择什么值,您的代码都将起作用。

添加一个(无论如何为将来的评估添加一个)之后,您将删除数组中超过60分钟的所有objectc。

do {
  [clicksOf60Minutes removeObjectAtIndex:0];
} while ([[clicksOf60Minutes removeObjectAtIndex:0]  timeIntervalSinceDate:firstDate]>3600]);

如果do/while是错误的循环且while更好,请不要对我大喊大叫。它应该是首先评估条件然后只有在条件为真时才执行循环体的那个。如果我没弄错的话,这是正确的。请仔细检查一下。 一旦完成,您的阵列将包含仅在过去60分钟内发生的点击时刻。现在检查它的号码。

if ([clicksOf60Minutes count] > 500) {
  // add points
} else {
  // show altert 
}