在我的应用程序中,我想将特定 UIButton(连接到操作方法)的按下次数限制为每小时 500 次。每次单击此按钮时,都会获得一个虚拟积分,我想将用户可以获得的积分数量限制为 500/小时。
当达到 500 点限制时,我想用一条消息(UILabel)替换按钮,告诉用户他/她必须等待“0:XX”分钟。
我正在想象黑手党战争如何限制用户的一些东西。
我找到了这个类似的线程,但它没有解释我特别想要什么。
在我的应用程序中,我想将特定 UIButton(连接到操作方法)的按下次数限制为每小时 500 次。每次单击此按钮时,都会获得一个虚拟积分,我想将用户可以获得的积分数量限制为 500/小时。
当达到 500 点限制时,我想用一条消息(UILabel)替换按钮,告诉用户他/她必须等待“0:XX”分钟。
我正在想象黑手党战争如何限制用户的一些东西。
我找到了这个类似的线程,但它没有解释我特别想要什么。
如何制作一个Array
来存储您的button click
历史记录
当您单击按钮时,获取点击次数Time
,并将其添加到history array
您可以检查Time
当前数组的哪个索引是 500 Time
(如果不超过 500 ,则表示使用不应等待)。
并计算 theCurrent Time
和 the之间的持续时间500 Before Time
如果是duration >= 1hour
,什么都不做;否则duration < 1hour
,使按钮启用,然后重新运行(1小时-持续时间),返回持续时间是用户必须等待
你想要做的是有一个NSDate
变量,当按下按钮时,将它设置为[NSDate date]
(如果你希望它是第一次按下后的一个小时,只有在 clicks==0 时才设置它)
然后,您将需要一个 NSTimer 每隔几秒循环一次,或者无论您希望它多么准确,并检查 if [[NSDate date] timeIntervalSinceDate:firstDate]>3600
,然后它会重置点击次数。
正如已经建议的那样,我会建立一个解决方案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
}