相关疑难解决方法(0)

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];
}
Run Code Online (Sandbox Code Playgroud)

这是输出:

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替换performSelector:withObject:withDelay:我得到这个:

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删除计时器

这不是我想要的,但是用来表明它只是导致它不起作用的延迟,而不是选择器没有在标题中声明,拼写错误或任何其他原因.

关于它为什么不起作用的任何想法?

iphone cocoa-touch uiscrollview

9
推荐指数
2
解决办法
4280
查看次数

标签 统计

cocoa-touch ×1

iphone ×1

uiscrollview ×1