gpt4 book ai didi

iphone - 执行选择器 :withObject:afterDelay: not working from scrollViewDidZoom

转载 作者:行者123 更新时间:2023-12-03 18:31:36 24 4
gpt4 key购买 nike

我觉得我应该知道这一点,但我已经被难住了好几个小时,而且我已经没有想法了。

原理很简单,用户使用捏合操作来操纵 ScrollView 中的缩放和定位。如果他们按住捏的时间很短,则 ScrollView 会记录缩放级别和内容偏移量。

所以我想我应该在scrollViewDidZoom委托(delegate)方法上启动一个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替换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 删除计时器

这不是我想要的,但它表明只是延迟导致它无法运行,与选择器未在 header 中声明、拼写错误或任何其他原因无关。

关于为什么它不起作用有什么想法吗?

最佳答案

我认为在跟踪期间(当手指向下滚动或缩放时)计时器事件被忽略。您可能必须以不同的模式执行选择器(请参阅[NSObject PerformSelector:withObject:afterDelay:inModes:])。具体来说,尝试使用 @[NSRunLoopCommonModes] 作为模式。

关于iphone - 执行选择器 :withObject:afterDelay: not working from scrollViewDidZoom,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2865760/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com