UIScrollView таймер - PullRequest
       17

UIScrollView таймер

0 голосов
/ 23 мая 2011

У меня есть UIScrollView и я хочу установить таймер, поэтому, если я прокручиваю и ничего не делаю в течение примерно 10 секунд, будет вызван метод задания, и если я прокручу до этих 10 секунд, таймер будет сброшен.Мой код не работает.

// 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;
    }

}

1 Ответ

0 голосов
/ 23 мая 2011
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");
}
...