【Objective-C】特定のUIGestureRecognizerを削除する

【Xcode5.1.1 + iOS 7.1 + MacOX10.9.4】

一時的にUIGestureRecognizerをセットして、不要になったら削除するという場合のメモ。例えば・・・

・UITapGestureRecognizerはデフォルトで常に設定
・ある条件で、UIPanGestureRecognizerを追加
・不要になったら、UIPanGestureRecognizerだけを削除

というような場合。

    for(UIGestureRecognizer *gesture in [selectIconView gestureRecognizers]) {
        NSLog(@" isClass UITapGestureRecognizer!! %d", [gesture isKindOfClass:[UITapGestureRecognizer class]]);
        NSLog(@" isClass UIPanGestureRecognizer!! %d", [gesture isKindOfClass:[UIPanGestureRecognizer class]]);
    }

※ selectIconViewは、UIGestureRecognizerを設定したUIImageView。

こんな感じで「isKindOfClass」で判定可能。

で、実際にやりたかったのは、こんな感じ。

    for(UIGestureRecognizer *gesture in [selectIconView gestureRecognizers]) {
        
        // UIPanGestureRecognizerのみ削除
        if([gesture isKindOfClass:[UIPanGestureRecognizer class]]) {
            [selectIconView removeGestureRecognizer:gesture];
        }
    }

【参考】
aideal.jp UIGestureRecognizer
gesture recognizerを全削除する – 日々精進
UIGestureRecognizerクラス | Second Flush
Objective-C – UIViewからUIGestureRecognizerを削除 – Qiita
isKindOfClassとisMemberOfClassってなにが違うねん | S4U -smile for you-