倒数计时器停止并重置为 0

Countdown timer that stops and reset on 0

我的倒数计时器出现问题,它不想从 60 开始倒计时并在达到 0 时重置。目前它只是将其标签设置为 0 并开始倒计时到 -1、2-... 我如何让它从 xcode 中的 iOS 的 60 开始?

.m 文件

#import "ViewController.h"

@interface ViewController ()
{
    int timeTick;
    NSTimer *timer;
}

@end

@implementation ViewController

- (IBAction)stopStartBtn:(id)sender {
    [timer invalidate];

    timeTick = 3;

    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(myTicker) userInfo:nil repeats:YES];
}

-(void)myTicker{
    timeTick--;

    NSString *timeString =[[NSString alloc] initWithFormat:@"%d", timeTick];
    self.display.text = timeString;

    if(timer >= 0){
        [timer invalidate];
    }
}

- (void)viewDidLoad {
    [super viewDidLoad];
    timeTick = 3;
}

@end

.h 文件

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

    @property (strong, nonatomic) IBOutlet UILabel *display;
    - (IBAction)stopStartBtn:(id)sender;


    @end

您的代码当前从 0 开始计时器,递减它,然后检查它是否已达到 60。显然这不会发生。

如果您想从 60 开始并在 0 停止,那么您需要在 viewDidLoad 中将 timeTick 设置为 60 并检查 0 中的值myTicker.

并且不要忘记在 viewDidLoad 方法中调用 [super viewDidLoad];

您还需要修正您的支票,看看您是否已达到零。现在您正在查看 timer 指针而不是 timeTick 整数。

变化:

if(timer >= 0){
    [timer invalidate];
}

至:

if (timeTick <= 0) {
    [timer invalidate];
}

您也永远不会设置 timer 实例变量。您实际上设置了一个同名的局部变量。

变化:

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(myTicker) userInfo:nil repeats:YES];

至:

timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(myTicker) userInfo:nil repeats:YES];
@interface Ovning1 ()
{
   int timeTick;
   NSTimer *timer;
}
@end

@implementation Ovning1


- (IBAction)stopStartBtn:(id)sender {

    [timer invalidate];

    timeTick = 60;

    timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(myTicker) userInfo:nil repeats:YES];
}

-(void)myTicker{

    timeTick--;

    NSString *timeString =[[NSString alloc] initWithFormat:@"%d", timeTick];
    self.display.text = timeString;


    if(timeTick <= 0){
        [timer invalidate];
    }
}