0

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

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

我正在想象黑手党战争如何限制用户的一些东西。

我找到了这个类似的线程,但它没有解释我特别想要什么。

4

3 回答 3

2

如何制作一个Array来存储您的button click历史记录

当您单击按钮时,获取点击次数Time,并将其添加到history array

您可以检查Time当前数组的哪个索引是 500 Time(如果不超过 500 ,则表示使用不应等待)。

并计算 theCurrent Time和 the之间的持续时间500 Before Time

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

于 2013-03-17T08:48:32.140 回答
0

你想要做的是有一个NSDate变量,当按下按钮时,将它设置为[NSDate date](如果你希望它是第一次按下后的一个小时,只有在 clicks==0 时才设置它)

然后,您将需要一个 NSTimer 每隔几秒循环一次,或者无论您希望它多么准确,并检查 if [[NSDate date] timeIntervalSinceDate:firstDate]>3600,然后它会重置点击次数。

于 2013-03-17T08:52:45.813 回答
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 
}
于 2013-03-17T09:45:03.800 回答