计时器在想要时不停止,在不想时停止 Obj-C
Posted
技术标签:
【中文标题】计时器在想要时不停止,在不想时停止 Obj-C【英文标题】:Timer not stopping when wanted to and stopping when not wanted to Obj-C 【发布时间】:2015-06-24 00:18:38 【问题描述】:故事板设置在 2 个 VC 上。 initial VC
有一个按钮,segues
指向发生battleScene
的位置。 battleScene
有一个将segues
返回到initial VC
的按钮,一个显示健康状况的标签,以及一个启动计时器的按钮。
我有 2 个问题一直在努力解决,但尚未解决。
1:当我播放NSTimer
时,切换 VC 并返回到计时器影响标签的 VC,标签停止更新。
2:当敌人 2 的生命值为 0 并且我告诉计时器停止使用我的 stopTimer
方法时,计时器将继续。
int enemy001Hp = 100;
int enemy002Hp = 200;
bool enemy001Active = NO;
bool enemy002Active = NO;
- (void) enemy1
enemy001Active = YES;
self.enemyHpLabel.text = [NSString stringWithFormat:@"%i", enemy001Hp];
- (void) enemy2
enemy002Active = YES;
self.enemyHpLabel.text = [NSString stringWithFormat:@"%i", enemy002Hp];
- (void) enemyDamageTimer
if (enemy001Active == YES)
enemy001Hp -= 50;
self.enemyHpLabel.text = [NSString stringWithFormat:@"%i",enemy001Hp];
if (enemy001Hp <= 0)
[self enemy2];
self.enemyHpLabel.text = [NSString stringWithFormat:@"%i", enemy002Hp];
enemy001Active = NO;
enemy002Active = YES;
else if (enemy002Active == YES)
enemy002Hp -=50;
self.enemyHpLabel.text = [NSString stringWithFormat:@"%i", enemy002Hp];
- (void) stopTimer
[timer invalidate];
timer = nil;
- (void)viewDidLoad
[super viewDidLoad];
[self enemy1];
if (enemy002Active == YES)
self.enemyHpLabel.text = [NSString stringWithFormat:@"%i", enemy002Hp];
- (IBAction)idleAttack:(id)sender
self.idleOutler.hidden = YES;
timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(enemyDamageTimer) userInfo:nil repeats:YES];
if (enemy001Active == YES)
if (enemy001Hp <= 0)
[self enemy2];
enemy001Active = NO;
enemy002Active = YES;
else if (enemy002Active == YES)
if (enemy002Hp <= 0)
self.enemyHpLabel.text = [NSString stringWithFormat:@"0"];
enemy002Hp = 0;
enemy002Active = NO;
[self stopTimer];
我从计时器指南中获得了 stopTimer
方法,我一直在寻找如何解决计时器在 segue 问题上停止的问题,但无法解决。
干杯
【问题讨论】:
【参考方案1】:对于问题 1,您的计时器代码没有任何问题,因此问题可能仍然存在于 VC 转换代码中
对于问题 2,计时器将重复触发您从未调用过 stopTimer
的方法 enemyDamageTimer
。这就是计时器继续运行的原因
【讨论】:
所以只要我把stopTimer
方法放在enemyDamageTimer
里面它真的会停止吗?另外,对于第一季度,我没有用于 VC 转换的代码,我该怎么做才能使其工作?以上是关于计时器在想要时不停止,在不想时停止 Obj-C的主要内容,如果未能解决你的问题,请参考以下文章