UIScrollView计时器

时间:2011-05-23 19:40:23

标签: iphone uiscrollview nstimer

我有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 :(得分:-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");
}