2017-02-04 6 views
1

В моем приложении я хочу, чтобы UILongPressGestureRecognizer отправлял непрерывные сообщения каждую секунду, пока кнопка не будет отпущена. К сожалению, нет такого состояния, как «непрерывный», поэтому мне нужно использовать «началось» и «закончено», чтобы контролировать мои сообщения. Вот мой код, который у меня есть до сих пор, я получаю оба журнала на терминале, но цикл while не останавливается?iOS - UILongPressGestureRecognizer

- (void)longPress:(UILongPressGestureRecognizer*)gesture { 

    BOOL loop = NO; 

    if (gesture.state == UIGestureRecognizerStateBegan) { 
     NSLog(@"Long press detected."); 
     loop = YES; 
     while (loop){ 
      [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1]]; 
      // here I want to do my stuff every second 
     } 
    } else if (gesture.state == UIGestureRecognizerStateEnded) { 
     NSLog(@"Long press Ended"); 
     loop = NO; 
    } 
} 

Кто-нибудь может помочь?

+1

Предложения - использовать таймер. И используйте переменную экземпляра вместо локальной переменной. – rmaddy

+0

А может быть, рассмотрим подклассификацию UILongPressGestureRecognizer? – matt

ответ

1

Своих хорошее предложение использовать таймер (или performSelector:withDelay:, который, вероятно, скрывающий таймер), но, грубо говоря:

@property(strong,nonatomic) NSTimer *timer; 

- (void)longPress:(UILongPressGestureRecognizer*)gesture { 
    if (gesture.state == UIGestureRecognizerStateBegan) { 
     NSLog(@"started"); 
     self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(stillPressing:) userInfo:nil repeats:YES]; 
    } else if (gesture.state == UIGestureRecognizerStateEnded) { 
     [self.timer invalidate]; 
     self.timer = nil; 
     NSLog(@"ended"); 
    } 
} 

- (void)stillPressing:(NSTimer *)timer { 
    NSLog(@"still pressing"); 
} 
+0

NICE - отлично работает! Спасибо за вашу помощь!!! – Hecot

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