2011-05-23 4 views
0

J'ai un UIScrollView et que vous souhaitez régler une minuterie, donc si je fais défiler et ne rien faire pendant environ 10 secondes, une méthode de travail sera appelé, et si je fais défiler la minuterie replacerez avant ces 10 secondes. Mon code ne fonctionne pas.UIScrollView timer

// Global vars 
NSDate *startDate, *endDate; 

// myTimer (NSTimer) and timerIsValid(BOOL) are part of my viewController class 

- (BOOL)timerExpired 
{ 

    NSDate *dateNow=[NSDate date]; 

    if ([[dateNow laterDate:endDate] isEqual:endDate]) { 
     return YES; 
    } 
    else { 
     return NO; 
    } 
} 

// If i begin scrolling i want to stop the timer 
- (void)scrollViewWillBeginDragging:(UIScrollView *)myScrollView 
{ 
    // Check if the timer is alive and invalidate it 
    if ([self timerExpired] == NO) { 
     NSLog(@"TIMER STILL ALIVE...KILL IT"); 
     [myTimer invalidate]; 
     myTimer = nil; 
     timerIsValid = NO; 
    } 
    else { 
     NSLog(@"TIMER IS DEAD");   
     timerIsValid = YES; 
    } 
} 

// After 10 seconds if i didn't scroll, i want to some job 
- (void)scrollViewDidEndDecelerating:(UIScrollView *)myScrollView 
{ 
    if (endDate) { 
     [endDate release]; 
    } 
    startDate = [NSDate date]; 
    endDate = [[startDate addTimeInterval:10.0] retain]; 

    if (!myScrollView.dragging) 
    { 
     if (autoscrollTimer == nil) { 
      // Create a new timer 
      myTimer = [NSTimer scheduledTimerWithTimeInterval:10.0 
                   target:self 
                  selector:@selector(timerFireMethod:) 
                  userInfo:nil 
                   repeats:YES]; 
     } 
    } 
} 

- (void)timerFireMethod:(NSTimer*)theTimer 
{ 
    if (timerIsValid) { 
     // do nothing 
     NSLog(@"DO NOTHING"); 
    } 
    else { 
     NSLog(@"DO SOME JOB"); 
     [self doSomeJob]; 
     timerIsValid = YES; 
    } 

} 

Répondre

-1
NSTimer *_scrollTimer; // instance variable 


- (void)scrollViewWillBeginDragging:(UIScrollView *)myScrollView 
{ 
    [_scrollTimer invalidate] 
    _scrollTimer = nil; 
} 

- (void)scrollViewDidEndDecelerating:(UIScrollView *)myScrollView 
{ 
    assert(_scrollTimer == nil); 
    _scrollTimer = [NSTimer scheduledTimerWithTimeInterval:10 
                target:self 
                selector:@selector(timerFireMethod:) 
                userInfo:nil 
                repeats:NO]; 
} 

- (void)timerFireMethod:(NSTimer *)theTimer 
{ 
    _scrollTimer = nil; 
    NSLog(@"DO SOME JOB"); 
} 
+0

Hey man, c'est une façon élégante de le faire :), vraiment merci. Dieu vous bénisse :). – funnyCoder

+1

Vous êtes les bienvenus. Mais je préfère que les bénédictions me laissent tranquille. –

+0

Moi aussi :), merci. – funnyCoder