いろいろなアプリでよくあるボタンの長押しによる連続処理を実装してみた。
始めは、どのように作り込むのがよいのか少し悩んだが、例によってネットで検索すると良い方法が出ていた。
長押し用のクラス「UILongPressGestureRecognizer」があったので、これを利用するのが最もよいようであった。
//ボタンの長押し設定部分
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressedButton:)];
[button addGestureRecognizer:longPress];
上記の用に、長押しを「button」に設定する。
「longPressedButton」に長押し時の処理を書けばよい。
さらに、この中で、長押しの動作を細かく分けて処理を行う事が出来る。
-(void) longPressedButton:(UILongPressGestureRecognizer *)gestureRecognizer
{
switch (gestureRecognizer.state) {
case UIGestureRecognizerStateBegan:
//長押しを検知開始
break;
case UIGestureRecognizerStateEnded:
//長押し終了時
break;
default:
break;
}
}
上記のように長押しの開始終了を分ける事が可能。
さらに、他にもあるので、case文を増やすとさらに細かな処理を出来るが、他の処理としては、押したまま動かした時にくるイベントと、異常系のイベントらしかった。
今回、自分が欲しかったのは無いようであったので、上記のように実装した。
長押し中に連続した処理は、長押し開始時にタイマをセットし、終了時にタイマ停止を入れ、タイムアウトに処理を入れる事で、連続処理が行われるようになった。
これから先も、1回押しと、長押しの区別がされる事は、かなり便利に使う事が出来ると思う。
[2回]
PR