计时器在想要时不停止,在不想时停止 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的主要内容,如果未能解决你的问题,请参考以下文章

如何停止在 C# 类中运行的计时器

当活动暂停时,如何正确停止倒数计时器中的媒体播放器?

倒数计时器停止在后台运行

如何创建一个倒数计时器,当屏幕关闭时停止并“等待”,重新打开时恢复。安卓

Android 呼叫通知 - 单击时停止计时器

mysql值到计时器并不断增加和更新直到单击停止?