使用Objective-C中的for循环减慢NSTimer

时间:2015-11-14 18:00:23

标签: ios objective-c for-loop nstimer

我有一个按钮,当按下时会产生由NSTimer以特定频率触发的随机数,并且当它被释放时我希望它继续产生它们,只是更慢和更慢直到它停止。

- (void)buttonPressed {


_timer = [NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(generateNumber) userInfo:nil repeats:YES];


}

- (void)buttonReleased {

if ([_timer isValid]) {
    [_timer invalidate];
}
_timer = nil;



for (float i=0.20; i<1; i += 0.1) {
    _timer = [NSTimer scheduledTimerWithTimeInterval:i target:self selector:@selector(generateNumber) userInfo:nil repeats:NO];
}

}

按下按钮时工作正常,但一旦我释放它实际上加速然后突然停止。知道为什么它不起作用或任何其他方式我可以达到想要的结果吗?

2 个答案:

答案 0 :(得分:2)

一旦你的按钮被释放,生成就会加速,因为在那一刻你从按钮释放时开始计划8个定时器,间隔为0.2,0.3,0.4,0.5,0.6,0.7,0.8和0.9,这意味着每个定时器将执行0.1 s接着另一个,它的间隔小于原始计时器(0.2s)。

这是另一种选择

@interface ViewController ()
@property (nonatomic, retain) NSTimer *timer;
@property (nonatomic) float curInterval;
@end

@implementation ViewController

- (IBAction)buttonDown {
    self.curInterval = 0.1;
    [self updatePressed];
}

- (void)updatePressed {
    [self generateNumber];
    self.timer = [NSTimer scheduledTimerWithTimeInterval:self.curInterval target:self selector:@selector(updatePressed) userInfo:nil repeats:NO];
}

- (IBAction)buttonUp {
    [self.timer invalidate];
    [self updateUp];
}

- (void)updateUp {
    [self generateNumber];
    self.curInterval += 0.1;
    if (self.curInterval < 1.0f) {
        self.timer = [NSTimer scheduledTimerWithTimeInterval:self.curInterval target:self selector:@selector(updateUp) userInfo:nil repeats:NO];
    }
}
@end

答案 1 :(得分:0)

在Button释放方法中,您使用for循环继续执行,直到达到1的间隔。您需要做的是获取全局浮点值并在开始时将其初始化为0.20。按下按钮传递该值。在按钮释放时增加全局变量并将该值传递给NSTimer而不是for循环

body {
  background-image: url("BG.jpg");
  background-repeat: repeat-repeat;
}
.About p {
  background-color: #000000;
  color: #FFFFFF;
  font-size: 24px;
  margin: 50px;
  padding: 50px;
}