20

ジェスチャーに関連する問題が発生しました。スワイプの左右のイベントを取得するためにUISwipeGestureRecognizerを実装しました。うまくいきました。しかし、私が直面している問題は、UISliderの私が同じ考え方でうまくやっていないということです。スライダのスライド動作は、左右のスワイプと誤っています。ジェスチャーの問題:UISwipeGestureRecognizer + UISlider

これまでにこの問題が発生したことがありますが、これを修正する方法はありますか?

多くのありがとうございます。ここで

は、ビューコントローラ内に含まれるコードです:

- (void)viewDidLoad { 

      [super viewDidLoad]; 

       //Setup handling of LEFT and RIGHT swipes 
      UISwipeGestureRecognizer *recognizer; 

       recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom:)]; 
       [recognizer setDirection:(UISwipeGestureRecognizerDirectionRight)]; 
       [[self view] addGestureRecognizer:recognizer]; 
       [recognizer release]; 

       recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom:)]; 
       [recognizer setDirection:(UISwipeGestureRecognizerDirectionLeft)]; 
       [[self view] addGestureRecognizer:recognizer]; 
       [recognizer release]; 
     } 

    -(void)handleSwipeFrom:(UISwipeGestureRecognizer *)recognizer { 

     if (recognizer.direction == UISwipeGestureRecognizerDirectionRight) { 
     NSLog(@"Swipe Right"); 
     //Do stuff 
     } 

     if (recognizer.direction == UISwipeGestureRecognizerDirectionLeft) { 
     NSLog(@"Swipe Left"); 
     //Do stuff 
     } 
    } 

答えて

55

これを処理する最も簡単な方法は、あなたのスライダーにタッチを見てからジェスチャー認識を防ぐことが考えられます。あなたが代理人として自分自身を設定して、これが機能しない場合

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 
    if ([touch.view isKindOfClass:[UISlider class]]) { 
     // prevent recognizing touches on the slider 
     return NO; 
    } 
    return YES; 
} 

を実装することによってそれを行うことができ、それはあなたがsuperviewチェーン、テストを歩くことができるようにスライダーが実際に、タッチを受けサブビューを持つことが可能です途中の各ビュー。

+0

ありがとう! – MrDB

+0

これをテストしました。できます。代わりに、代わりにUISliderクラスをチェックするようにしなければなりませんでした。 – MrDB

+0

おっと、私はスイッチを言った。私はそれを修正するつもりです。 –

0

ケビンが上記のように反応する直前に、私はこれを手に入れました。ここで私が使用したコードはありますが、ケビンのほうがきれいです(ケビンのことをテストしていません):