Я думаю, что вы могли бы избавиться от двух таймеров и определить промежуточную функцию, скажем enableTimerFor:
, которую вы могли бы вызывать из -scrollViewDidEndDecelerating:
и -touchesEnded:withEvent:
вместо создания там 2 таймеров.
enableTimerFor:
в основном создаст таймер и запланирует его:
-(void)enableTimerFor:(NSUInteger)callerId {
viewTimer = [NSTimer scheduledTimerWithTimeInterval:5.0
target:self
selector:@selector(timerFired:)
userInfo:nil
repeats:NO];
}
-(void)timerFired {
// do whatever you need to
}
И он будет называться так:
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
....
[self enableTimerFor:kTouchesEnded];
....
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
if (!scrollView.dragging) {
//Doing some management stuff here
[self enableTimerFor:kScrollEnded];
}
....
}
Таким образом, у вас не будет проблем с синхронизацией.Также обратите внимание, что я думал о enableTimerFor:
как о параметре, который позволяет вам определить, был ли он вызван из одной или другой функции, но вы можете легко решить избавиться от него в случае, если вам не нужно различать дваслучаи.
Я не уверен, что это предложение может сработать для вас, поскольку я не знаю всех деталей вашего решения, но все же я думаю, что это самое прямое предложение, учитывая имеющуюся у меня информацию.