2011-12-04 41 views
6

指がどこにあるかを把握しようとしていますUIScrollView。 私はUIScrollView(下を参照)をサブクラス化しましたが、残念ながら私が追加しているジェスチャ認識器は標準のものをオーバーライドしています。UIScrollViewの標準パンジェスチャ認識機能に機能を追加

結果としてNSLog(@"Pan")が機能しますが、残念ながらビューはもうスクロールしません。

ジェスチャーレコグナイザを同時に動作させるにはどうすればよいですか?

ありがとうございました。

- (void)viewDidLoad:(BOOL)animated 
{ 
    [super viewDidLoad:animated]; 

    UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)]; 
    [scrollView addGestureRecognizer:panRecognizer]; 
} 


- (void)pan:(id)sender { 
    NSLog(@"Pan"); 
} 
+2

あなたは、両方のことが同時に起こったときに起こると思われることは言わない。スクロールしてパンレコグナイザをアップデートすると期待していますか?もしそうなら、ビューがスクロールされたときに呼び出されるスクロールビューのデリゲートメソッドを聞くだけではどうですか? –

+0

私はビューをスクロールし、タッチしたすべての点を記録したいと思います(私が 'locationInView:'メソッドを通して取得できることはわかっています)。スクロールビューのデリゲートは興味深いように聞こえます - それは聞いたことがありません...私はiOSプログラミングの新機能ですが、どうしたらうまくいくのでしょうか?ありがとう。 –

+0

私は[スクロールビューの代理人についてこのリファレンスを見つけました](http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIScrollViewDelegate_Protocol/Reference/UIScrollViewDelegate.html#//apple_ref/occ/intf/ UIScrollViewDelegate)しかし、私はタッチの座標を取得する方法を理解していません。 –

答えて

4

EDIT:このメソッドは動作します!できるだけ早くcanCancelContentTouchesを設定するだけです(私はviewDidLoadでそれを行います)。

オリジナル回答:私は新しいアプローチを試みましたが、残念ながら完全には機能しません。

ジェスチャ認識機能を追加する代わりに、私はUIScrollViewをサブクラス化し、私自身のtouchesBegan、などのメソッドを記述しています。

ユーザーが触れているが、残念ながらPanGestureRecognizerもNOにcanCancelContentTouchesを設定した後、私はをスクロールするために起動するたびにtouchesCancelledトリガされた場合、私が知っているこの方法です。

なぜ誰が知っていますか?私はまたthisを見つけました。

14

標準のものを上書きしないようにするには、両方を同時に認識できるようにしてください。

- (void)viewDidLoad:(BOOL)animated 
{ 
    [super viewDidLoad:animated]; 

    UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)]; 
    panRecognizer.delegate = self; 
    [scrollView addGestureRecognizer:panRecognizer]; 
} 

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


- (void)pan:(id)sender { 
    NSLog(@"Pan"); 
} 
+0

これは完全に機能します! –

関連する問題