2017-02-04 12 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