2012-01-18 2 views
0

У меня есть этот код в LongTapGestureRecognizer для автопрокрутки вид:Жест распознаватель в ИОС

-(void) longPressDetectedgesture: 
     (UILongPressGestureRecognizer*)recognizer 
{ 
    _btnautoscrollstop.hidden = NO; 
    _btnautoscroll.hidden = YES; 

    // if (autoscrollTimer == nil) { 

    autoscrollTimer = [NSTimer 
     scheduledTimerWithTimeInterval:(55.0/1000.0) 
     target:self 
     selector:@selector(autoscrollTimerFired:) 
     userInfo:nil 
     repeats:YES]; 
} 
- (void)autoscrollTimerFired:(NSTimer*)timer { 
    CGPoint scrollPoint = self.table.contentOffset; 
    scrollPoint = CGPointMake(scrollPoint.x, scrollPoint.y + 1); 
    [self.table setContentOffset:scrollPoint animated:NO]; 
} 

Он отлично работает для меня, но моя потребность, то autoscrooling должен остановиться, когда пользователь нажимает на экран для Longgesture для второй раз и наоборот. Как остановить это, когда пользователь вторгается во второй раз.

+0

@mvds я пытался много для того чтобы достигнуть этого, но не повезло я поставил - (Недействительными) не touchesEnded: (NSSet *) касается withEvent: (UIEvent *) событие { \t NSUInteger numTaps = [[прикосновений anyObject] tapCount]; \t \t \t если (numTaps == 2) {внутри этого я поставил дезактивировать код времени, но не повезло – stackiphone

ответ

0

Похоже, вы почти там. Вы, вероятно, хотите что-то вроде этого:

if (recogniser.state == UIGestureRecognizerStateBegan) { 
    if (autoscrollTimer == nil) { 
     autoscrollTimer = [NSTimer scheduledTimerWithTimeInterval:(55.0/1000.0) 
                  target:self 
                 selector:@selector(autoscrollTimerFired:) 
                 userInfo:nil 
                  repeats:YES]; 
    } else { 
     [autoscrollTimer invalidate]; 
     autoscrollTimer = nil; 
    } 
} 
+0

я не ставил свой код, но когда я relese мой палец он didnot свиток, авто scroling происходит только тогда, когда я нажмите на экран continusly , после чего я остановился – stackiphone

+0

Отредактировано. Просто нужно проверить, в каком состоянии оно находится. Вы можете настроить его, чтобы остановить, когда состояние изменится на 'UIGestureRecognizerStateEnded' или что-то еще. Я уверен, что вы можете понять, как это сделать. – mattjgalloway

+0

не повезло для меня. Я попробовал. – stackiphone

0

Что я обычно делаю, объявляю глобальный BOOL Alter; и инициализировать его Alter = NO; в viewDidLoad (или любым другим способом), то

-(void) longPressDetectedgesture:(UILongPressGestureRecognizer*)recognizer 
{ 
    if(Alter) 
    { 
     Alter = NO; 
     [autoscrollTimer inValidate]; 
    } 
    else 
    { 
     Alter = YES; 
     _btnautoscrollstop.hidden = NO; 
     _btnautoscroll.hidden = YES; 

    // if (autoscrollTimer == nil) { 

    autoscrollTimer = [NSTimer scheduledTimerWithTimeInterval:(55.0/1000.0) 
                target:self 
               selector:@selector(autoscrollTimerFired:) 
               userInfo:nil 
                repeats:YES]; 
    } 
} 
+0

Не повезло мне на этот раз – stackiphone

+0

привет я отредактировал свой ответ, пожалуйста, проверьте. – Krrish

+0

Зачем вам это делать, а не просто использовать, если 'autoscrollTimer' является' nil', хотя? Что вы получаете от случайного дополнительного флага, когда у вас уже есть один в 'autoscrollTimer'? – mattjgalloway

0

создать BOOL называется shouldFireTimer в viewDidLoad или подобное и обновлять его значение каждый раз, когда вы обнаружили longpress

-(void) longPressDetectedgesture: (UILongPressGestureRecognizer*)recognizer { 
    _btnautoscrollstop.hidden = NO; 
    _btnautoscroll.hidden = YES; 
    if (shouldFireTimer) { 
     [autoscrollTimer invalidate]; 
     autoscrollTimer = nil; 
    } else { 
     autoscrollTimer = [NSTimer 
      scheduledTimerWithTimeInterval:(55.0/1000.0) 
      target:self 
      selector:@selector(autoscrollTimerFired:) 
      userInfo:nil 
      repeats:YES]; 
    } 
    shouldFireTimer = !shouldFireTimer; 
} 

- (void)autoscrollTimerFired:(NSTimer*)timer { 
    CGPoint scrollPoint = self.table.contentOffset; 
    scrollPoint = CGPointMake(scrollPoint.x, scrollPoint.y + 1); 
    [self.table setContentOffset:scrollPoint animated:NO]; 
} 

или как Мэтт говорит, что выше, может быть просто проверить nil вместо использования BOOL. Я предлагаю использовать BOOL, поскольку вы, возможно, запускаете autoscrollTimerFired в других обстоятельствах тоже (например, с помощью кнопки), то есть, возможно, это не так, если вы хотите его вызвать.

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