两个问题:
我是否在正确/高效的庄园中使用了afterDelay?我是对Objective-c的新手,所以我只是想确保我正确使用它。
每当我在时间到来之前再次调用它时,它会开始运行两个方法(这是有道理的)。经过一些研究后,我发现了cancelPreviousPerformRequestWithTarget,但它似乎取消了再次调用该方法的能力。我不确定是否有更好的方法来解决这个问题。
<input type="text" name="start" id="start">
答案 0 :(得分:0)
试试这段代码,我想你需要这个
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(method name) object:nil];
答案 1 :(得分:0)
第一个问题的答案是否定的。可以使用NSTimer和宏NS_ENUM执行此逻辑,以声明具有多个状态的枚举类型YourState(例如YourStateDefault = 0,YourStateRed,YourStateBlack,YourStatePurple)。
为什么这样?因为它可以让您控制逻辑流程和易于维护/调试的解决方案。您可以通过引用currentState属性来检查系统的状态(如下所示)。
比
(void)beginShow:(CGFloat)duration myIncrease:(CGFloat)myIncrease {
(void)toggleState { 它应该将currentState属性中保存的当前状态更改为下一个并调用更新UI逻辑。切换操作应仅针对正的remainingTime值执行。
如果retainTime变为负数,则应停用计时器并返回,如果它为正运行逻辑。 使用基于currentState值的switch语句确定下一个应该进入的状态。将当前状态设置为新状态并运行[self changeUIAccordingToState:currentState]。 您还需要在每个切换操作中减少“remainingTime” }