この対策として、「ボタン類にタップした時はジェスチャ判定を行わない」という処理を追加する。
具体的にはUIGestureRecognizerのdelegateにUIGestureRecognizerDelegateプロトコル対応クラスのオブジェクトをセットし、
そのクラスにてgestureRecognizer:shouldReceiveTouch:を実装する。
UIControl類をタップした時に無視する場合は以下のようなコードで良さそうだ。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { // ボタンやテキストフィールドに対してはジェスチャ判定は行わない return ![[self hitTest:[touch locationInView:self] withEvent:nil] isKindOfClass:[UIControl class]]; }
ここで、selfはUIViewのサブクラスのオブジェクトでUIGestureRecognizerDelegateプロトコルに対応させてあり、使用するジェスチャのdelegateとしてセット済み。