倒数计时器停止并重置为 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];
}
}
我的倒数计时器出现问题,它不想从 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];
}
}