2013-09-23 5 views
5

私がサブビューを持つscrollViewを持っていて、サブジェスチャがパンジェスチャ認識機能を持っていれば、scrollViewのパンジェスチャーオーバーライドはサブビューのパンです。私が望むのは逆ですが、それはスクロールビュー内で移動するサブビューをドラッグするのですが、別の領域にタッチすると、スクロールビューは通常通り移動します。それを設定する簡単な方法はありますか?ここでUIScrollViewは私のサブビューのパンジェスチャー認識子をオーバーライドします

答えて

12

が私のためにどのような作品だ:

UIPanGestureRecognizer *subviewPanRecognizer = [[UIPanGestureRecognizer alloc] 
    initWithTarget:self action:@selector(panSubview:)]; 
[subview addGestureRecognizer:subviewPanRecognizer]; 

// play nice with subview's pan gesture 
[scrollView.panGestureRecognizer 
    requireGestureRecognizerToFail:subviewPanRecognizer]; 
+0

これは、デフォルトの動作(UIIcageViewのUIImageViewサブビューを使用して実際に観察していること)のようです。誰かが確認/虚偽することができますか? – Norswap

+1

それは私のためには機能しません –

+0

特に、サブビューにデリゲートを適用し、 'gestureRecognizerShouldBegin:'を実装するとき、うまく動作します。 –

0

は、これら二つのデリゲート以下

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{ 
return YES; 

}

を上書きする。これは、両方のジェスチャーを認識することができます、デフォルトの戻りはNOです、上書きしてYESを返す必要があります。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{ 
if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]) { 
    if ([otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) { 
     return NO; 
    }else{ 
     return YES; 
    } 
} 
return YES; 

}このデリゲートあなたが望むようにそれはがotherGestureRecognizerで失敗する必要がありますgestureRecoginzerに名前を付けるだとしてあなたは、何でもできるで

は、あなたがする必要があるのはどのようなことを判断することですこれらの2つのジェスチャーの種類とYESまたはNOを返します。

関連する問題