【问题标题】:Timer not stopping when wanted to and stopping when not wanted to Obj-C计时器在想要时不停止,在不想时停止 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 问题上停止的问题,但无法解决。

干杯

【问题讨论】:

    标签: ios objective-c uiviewcontroller timer segue


    【解决方案1】:

    对于问题 1,您的计时器代码没有任何问题,因此问题可能仍然存在于 VC 转换代码中

    对于问题 2,计时器将重复触发您从未调用过 stopTimer 的方法 enemyDamageTimer。这就是计时器继续运行的原因

    【讨论】:

    • 所以只要我把stopTimer 方法放在enemyDamageTimer 里面它真的会停止吗?另外,对于第一季度,我没有用于 VC 转换的代码,我该怎么做才能使其工作?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    • 1970-01-01
    相关资源
    最近更新 更多