J'affiche l'heure en utilisant le code suivant ... J'ai la vue déroulante dans mon viewController ... Ici, je montre l'heure commençant par 00: 00.00 (mm: ss: SS) (minutes : secondes: millisecondes) et viser incrémenter les millisecondes, secondes basées sur millisecondes, minutes basées sur secondes ... Mais je veux afficher l'heure à partir de 75: 00.00 (mm: ss: SS) et je veux décrémenter les millisecondes, secondes et minutes à 00: 00.00 (mm: ss.SS) ... Comment puis-je ..?NStimer ne fonctionne pas correctement dans iOS
Je l'ai déjà demandé ce donc, dans le lien suivant .. NSTimer Decrease the time by seconds/milliseconds
I i suivre ce code le temps ne calcule pas (en arrière-plan aussi) quand je fais glisser et maintenez-la défilante avec en libérant le mouseClick ... Aidez-moi avec les changements dans le code ci-dessous ...
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];
}
Également pertinent (et ma plus grande gottcha): chaque thread a son propre objet RunLoop. [[NSRunLoop currentRunLoop] vous donnera l'objet runloop du thread actuel; et en fonction de votre code si vous ne programmez pas votre minuteur sur le fil principal, votre minuteur ne pourra jamais cocher. – pretzels1337