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

関連する問題