【问题标题】:Countdown timer that stops and reset on 0倒数计时器停止并重置为 0
【发布时间】:2017-07-18 14:45:35
【问题描述】:

我的倒数计时器出现问题,我不想从 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

【问题讨论】:

    标签: ios objective-c timer nstimer


    【解决方案1】:

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

    如果要从 60 开始并在 0 停止,则需要在 viewDidLoad 中将 timeTick 设置为 60,并检查 myTicker 中的 0 值。

    别忘了在你的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];
    

    【讨论】:

    • 我试过了,但它仍然没有停止 att 0 并重置。我更新了我使用的代码
    • 那是因为你正在检查tick &gt;= 0。你想检查tick &lt;= 0.
    • 那没有任何区别。就像计时器永远不会进入“if”语句
    • 仍然没有运气。你知道还有其他方法可以通过重置为 0 来进行倒计时吗?
    • 运行应用程序时实际发生了什么?计时器是否有效?
    【解决方案2】:
    @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];
        }
    }
    

    【讨论】:

    • 我试过了,但它仍然没有停止 att 0 并重置。我更新了我使用的代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多