今天項目需要實現一個類似於這樣的毫秒計時器功能,臥槽,我還想了半天,簡單做個記錄吧,後面哪位兄弟遇到這種的直接copy就行了
- 計時器停止那個API我原來居然不知道
[_timer setFireDate:[NSDate date]];
[_timer setFireDate:[NSDate distantFuture]];
- 時間顯示的話 原來 想着用三個控件(慚愧),毫秒 -> 秒 -> 分鐘
具體代碼實現
@interface ViewController () {
NSInteger _minute; // 分鐘
NSInteger _second; // 秒
NSInteger _millisecond; // 毫秒
BOOL _isStop;
}
@property (nonatomic, strong) NSTimer *timer;
@property (weak, nonatomic) IBOutlet UILabel *timeLabel;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
_isStop = YES;
self.timer = [NSTimer scheduledTimerWithTimeInterval:0.01
target:self
selector:@selector(startTimer)
userInfo:nil
repeats:YES];
// 讓定時器暫停
[_timer setFireDate:[NSDate distantFuture]];
}
- (void)startTimer{
_millisecond ++;
if(_millisecond == 100){
_second ++;
_millisecond = 0;
}
if (_second == 60) {
_minute ++;
_second = 0;
}
self.timeLabel.text = [NSString stringWithFormat:@"%02ld:%02ld:%02ld", _minute, _second, _millisecond];
}
// 開始/停止
- (IBAction)start:(id)sender {
UIButton *btn = (UIButton *)sender;
if (_isStop) {
[btn setTitle:@"停止" forState:UIControlStateNormal];
[_timer setFireDate:[NSDate date]];
_isStop = NO;
} else {
[btn setTitle:@"開始" forState:UIControlStateNormal];
[_timer setFireDate:[NSDate distantFuture]];
_isStop = YES;
}
}
// 重置
- (IBAction)reset:(id)sender {
_millisecond = 0;
_second = 0;
_minute = 0;
self.timeLabel.text = [NSString stringWithFormat:@"%02ld:%02ld:%02ld", _millisecond, _second, _minute];
}
@end