我有一个按钮,当按下时会产生由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];
}
}
按下按钮时工作正常,但一旦我释放它实际上加速然后突然停止。知道为什么它不起作用或任何其他方式我可以达到想要的结果吗?
答案 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;
}