【问题标题】:performSelector:afterdelay never called in scrollViewWillBeginDraggingperformSelector:afterdelay 从未在 scrollViewWillBeginDragging 中调用
【发布时间】:2014-10-27 10:30:54
【问题描述】:

当用户开始拖动滚动视图时,我尝试在延迟后调用方法。

下面的这个块被调用,但是这个 performselector 中定义的动作:只有当我停止拖动滚动视图时才被调用

- (void)viewDidLoad {
    [super viewDidLoad];
    UIScrollView *sv = [[UIScrollView alloc] initWithFrame:self.view.frame];
    sv.delegate = self;
    sv.backgroundColor = [UIColor redColor];
    [sv setContentSize:CGSizeMake(1000, 200)];
    [self.view addSubview:sv];
}

-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    NSLog(@"hey");
    [self performSelector:@selector(myAction) withObject:nil afterDelay:3];
}

- (void)myAction
{
    NSLog(@"Called 3secondes after begin dragging");
}

我也尝试使用 NSTimer 并在后台线程中,但问题是一样的......

有什么想法吗?

【问题讨论】:

  • 好吧,我刚试过,它对我有用。您确定代表设置正确吗?或者你的函数“myAction”不带参数?
  • 是的,我确定在“scrollViewDidEndDragging”时调用了“MyAction”……我知道这很奇怪。
  • 我刚刚尝试了一个空项目,我遇到了同样的问题:只有在我结束拖动时才调用“MyAction”

标签: objective-c scrollview delay uiscrollviewdelegate performselector


【解决方案1】:

如果您希望在您仍在拖动时触发回调,则必须将其安排为 Common Run Loop 模式,如下所示:

[self performSelector:@selector(myAction) withObject:nil afterDelay:3 inModes:@[NSRunLoopCommonModes]];

这样就可以了:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多