2012-03-02 12 views
6

私は、uiscrollviewに添付された3つのジェスチャー認識機能を削除しようとしています。ジェスチャー認識機能を完全に削除する方法

私が記載されている3を取得し、それらが

NSArray * activeScrollViewGRecs = [theScrollView gestureRecognizers]; 
NSLog (@"activeScrollViewGRecs count: %d",[activeScrollViewGRecs count]); 

を使用して一覧表示します。

その後、私はそれらを削除します。

for (UIGestureRecognizer *recognizer in activeScrollViewGRecs) 
{ 
    NSLog (@"recognizer: %@",recognizer.description); 
    recognizer.enabled = NO; 
    [theScrollView removeGestureRecognizer:recognizer]; 
} 

その後、私はそれらを再度リストアップし、ゼロカウントを取得します。彼らは消されていなければなりませんか? なぜ、ビューは同じタッチ/スワイプに応答し続けます(そしてジェスチャーメソッドが呼び出される)。彼らが良い状態になる前に起こる必要がある「フラッシング」メカニズムがありますか?

これは、それらが作成されます方法です:

tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handle1:)]; 
tapGesture.cancelsTouchesInView = NO; tapGesture.delaysTouchesEnded = NO; 
tapGesture.numberOfTouchesRequired = 2; tapGesture.numberOfTapsRequired = 2;  
[self.view addGestureRecognizer:tapGesture]; [tapGesture release]; 

swipeGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handle2:)]; 
swipeGesture.cancelsTouchesInView = NO; swipeGesture.delaysTouchesEnded = NO; swipeGesture.delegate = self; 
swipeGesture.direction = UISwipeGestureRecognizerDirectionLeft; 
[self.view addGestureRecognizer:swipeGesture]; [swipeGesture release]; 

おかげであなたはどんなジェスチャーを停止するには、以下のジェスチャーのデリゲートを使用していないのはなぜ

+0

ジェスチャを削除したにもかかわらずそれらが実際に起動されているかどうかを確認するために、ジェスチャメソッドにブレークポイントを設定しましたか? – Jeremy

+0

まあ、それに応答するメソッドはまだ呼び出されます。つまり、 - (void)handleTouchesOne:(UITapGestureRecognizer *)recognizer)...これは画面上でまだ起こっています。 – TrekOnTV2017

+0

興味深い。私は何とかジェスチャーが漏れた場合にこれが起こるのを見ました。 – Jeremy

答えて

1

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch; 
+0

これは私がそれらを取り除く方法です。今はそれが問題かもしれないと思います。デリゲートメソッドの途中でそれらを削除します。 – TrekOnTV2017

+0

なぜそれを削除する必要がありますか?あなたはこの関数でNOを返すだけですか? – cocoakomali

+0

私はそれらを適切に除去できないので、私はしなければならないと思う。 – TrekOnTV2017

0

はあなたのように私に見えるがジェスチャ認識プログラムをビューに追加しますが、ScrollViewからジェスチャ認識プログラムを削除します。これはあなたが意図したものですか?あなたがそれらを停止したい場合は、self.viewからジェスチャ認識プログラムを削除する必要があります。

+0

こんにちは。私はそれらが添付されているのと同じビューからそれらを削除しています。これを確認するには、削除前後のgestureRecognizers配列を確認します。それは前と後の3です。 – TrekOnTV2017

+0

スクロールビューには常にジェスチャ認識機能がありますが、投稿したコードに応じて、追加しているビューは削除していないようです。 theScrollViewの代わりにself.viewを実行し、問題が修正されているかどうか確認してください。 –

0

UIGestureRecognizerDelegateプロトコルを採用し、次の方法を実装します。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 
{ 
    if (to completely remove gesture recognizers) 
     return NO; 
    else 
     return YES; 
} 
関連する問題