다음 코드를 사용하여 시간을 표시하고 있습니다 ... 내 viewController에서 스크롤보기가 있습니다 ... 00 : 00.00 (mm : ss : SS) (분)으로 시작하는 시간을 표시합니다. : seconds : milliseconds) 밀리 초를 기준으로 밀리 초, 밀리 초를 기준으로 초를 증가시키는 것을 목표로합니다.하지만 75 : 00.00 (mm : ss : SS)부터 시작하여 밀리 초, 초 분 : 00 : 00.00 (mm : ssS) ... 어떻게 ..? 내가 드래그 아웃이 해제로 스크롤 뷰를 개최 할 때NStimer가 iOS에서 제대로 작동하지 않습니다.
이미 다음 링크에서 SO이를 요청했습니다 .. NSTimer Decrease the time by seconds/milliseconds
나는 내가 (또한 배경에) 시간이 계산되지 않도록 규정을 따르십시오 마우스 클릭은 ...
enter code here
@interface ViewController : UIViewController
{
IBOutlet UILabel *time;
NSTimer *stopWatchTimer;
NSDate *startDate;
NSTimeInterval secondsAlreadyRun;
}
- (void)reset:(id)sender;
- (void)onStartPressed:(id)sender;
- (void)onStopPressed:(id)sender;
enter code here
-(void)showActivity:(NSTimer *)tim
{
NSDate *currentDate = [NSDate date];
NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:startDate];
// Add the saved interval
timeInterval += secondsAlreadyRun;
NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval];
static NSDateFormatter * dateFormatter = nil;
if(!dateFormatter){
dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"mm:ss.SS"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]];
}
NSString *timeString=[dateFormatter stringFromDate:timerDate];
time.text = timeString;
// [dateFormatter release];
}
- (void)onStartPressed:(id)sender
{
stopWatchTimer = [NSTimer scheduledTimerWithTimeInterval:1/10
target:self
selector:@selector(showActivity:)
userInfo:nil
repeats:YES];
// Save the new start date every time
startDate = [[NSDate alloc] init]; // equivalent to [[NSDate date] retain];
[stopWatchTimer fire];
}
- (void)onStopPressed:(id)sender
{
// _Increment_ secondsAlreadyRun to allow for multiple pauses and restarts
secondsAlreadyRun += [[NSDate date] timeIntervalSinceDate:startDate];
[stopWatchTimer invalidate];
stopWatchTimer = nil;
// [startDate release];
// [self showActivity:stopWatchTimer];
}
또한 관련성이 높은 (내 가장 큰) : 각 스레드는 자체 RunLoop 개체가 있습니다. [[NSRunLoop currentRunLoop]은 현재 스레드의 runloop 객체를 제공합니다. 그리고 코드에 따라 주 스레드에서 타이머를 예약하지 않으면 타이머가 절대로 틱하지 않을 수 있습니다. – pretzels1337