0

Я пытаюсь вызвать метод после задержки, когда пользователь начинает перетаскивать scrollView.performSelector: afterdelay никогда не вызывался в scrollViewWillBeginDragging

Этот блок ниже называется, но действие определяют в этом performselector: вызывается только тогда, когда я останавливаюсь, чтобы перетащить Scrollview

- (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 и в фоновом потоке, но проблема заключается в то же самое ...

Любая идея?

+0

Ну, я просто попробовал, и это работает для меня. Вы уверены, что делегат настроен? или что ваша функция «myAction» не принимает параметр? –

+0

Да, я уверен, что причина «MyAction» вызывается, когда «scrollViewDidEndDragging» .. Я знаю, что это очень странно. –

+0

Я только что попробовал с пустым проектом, и у меня такая же проблема: «MyAction» вызывается только тогда, когда я заканчиваю перетаскивание –

ответ

2

Если вы хотите иметь обратный вызов выстрелил в то время как вы все еще перетаскивание, вы должны запланировать для режимов Common Run Loop, например, так:

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

Это будет делать трюк :)

+1

<3 @Bartek Chlebek –

Смежные вопросы