我有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;
}
}
答案 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");
}