我觉得我应该知道这一点,但我已经被困了几个小时了,现在我已经没有想法。performSelector:withObject:afterDelay:不能从scrollViewDidZoom工作
理论很简单,用户使用捏来操纵缩放和滚动视图中的位置。如果他们持续捏住一小段时间,则滚动视图会记录缩放级别和内容偏移量。
所以我想我会在scrollViewDidZoom委托方法中启动一个performSelector:withObject:withDelay。如果过期,我会记录设置。每次调用scrollViewDidZoom时以及捏合手势完成时,我都会删除预定的呼叫。
这是我有:
- (void)scrollViewDidZoom:(UIScrollView *)scrollView{
NSLog(@"resetting timer");
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(positionLock) object:nil];
[self performSelector:@selector(positionLock) withObject:nil afterDelay:0.4];
}
-(void)positionLock{
NSLog(@"position locked ");
}
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale{
NSLog(@"deleting timer");
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(positionLock) object:nil];
}
这是输出:
2010-05-19 22:43:01.931复位计时器
2010-05-19 22:43:01.964复位计时器
2010-05-19 22:43:02.231复位计时器
2010-05-19 22:43:02.253复位计时器
2010-05-19 22:43:02.269复位计时器
2010-05-19 22:43:02.298复位定时器
2010-05-19 22:43:05.399删除计时器
正如你所看到的最后一个和倒数第二个事件之间的延迟应该是绰绰有余为延迟选择器调用执行。
如果我代替performSelector:withObject:withDelay与普通的老式performSelector:我得到这个:
2010-05-19 23:08:30.333复位定时器
2010-05-19 23:08:30.333的位置锁定
2010-05-19 23:08:30.366复位定时器
2010-05-19 23:08:30.367的位置锁定
2010-05-19 23:08:30.688删除计时器
其中ISN”我想要的东西,但只是表明它只是延迟导致它不func而不是在标题中声明的选择器,拼写错误或任何其他原因。
任何想法为什么它不工作?
它看起来像你有一个点。我想知道为什么这些事件被忽略。这是一个设计选择?有没有关于这方面的任何文件? – erkanyildiz 2012-10-22 16:35:33
你是对的。这一直在推动我坚果..! – 2015-09-24 17:14:53