-1

-touchesEndedメソッドの実行が終了してから 2 秒後に認識されるメソッドを実行したい。ただし、ユーザーがこの 2 秒以内に何かに触れた場合、メソッドを実行してはなりません。-touchesEndedメソッドが次回実行された後、2 秒間待機するようにタイマーを再度設定する必要があります。などなど... この質問が十分に明確であることを願っています。そうでない場合は、お知らせください。

4

3 に答える 3

2

これを調整するには、 NSTimerを使用する必要があります。タイマーを開始するイベントがトリガーされたらscheduledTimerWithTimeInterval:target:selector:userInfo:repeats:、関数呼び出しを 2 秒でスケジュールするために使用します。

ビュー コントローラーに対してグローバルなブール変数を使用して、その間にタイマーが設定されないようにします。

大まかなアイデアは次のとおりです。

BOOL shouldRespondToTouch = YES;

- (void)touchesEnded {
    [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(doAction) userInfo:nil repeats:NO];
    shouldRespondToTouch = NO;
}

- (void)doAction {
    shouldRespondToTouch = YES;
    // Do stuff here
}
于 2013-04-02T18:18:54.053 に答える
0

結局のところ、それは本当に簡単です。

view.h で ivar を作成します。

NSDate *startDate;

view.m のこれらのメソッドに以下を追加します。

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
self->startDate = [NSDate date];
NSLog(@"%@", startDate);
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
if (self->startDate) {
        NSTimeInterval ti = [[NSDate date] timeIntervalSinceDate:self->startDate];
        NSLog(@"Time: %f", ti);
        if (ti >= 2 ) {
            NSLog(@"Yes, greater than 2 seconds !");
        }
    }
}

魅力のように機能します。

于 2013-04-03T14:57:29.663 に答える