iOS 開發 毫秒計時器

今天項目需要實現一個類似於這樣的毫秒計時器功能,臥槽,我還想了半天,簡單做個記錄吧,後面哪位兄弟遇到這種的直接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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章