2013-10-13 13 views
9

iOS 7のユーザーから断続的な報告があります。UIPanGestureRecognizerはしばらくの間、特定のビューで作業を停止します。彼らはビューを左右にスワイプすることができるはずですが、ちょうど壊れてしまい、何らかの未知の理由でうまく動作しません。アプリを強制終了して再起動すると、問題が修正されます。UIPanGestureRecognizerがiOS 7で動作しないことがあります

この問題は、iOS 6に起こったことがないと私は唯一の水平パンを認識するためにジェスチャーを強制的にgestureRecognizerShouldBegin代理人以外の任意の時点でのジェスチャ認識装置を無効に任意のコードを持っていない:

- (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer { 

    if ([gestureRecognizer isMemberOfClass:[UIPanGestureRecognizer class]]) { 

     CGPoint translation = [gestureRecognizer translationInView:[self superview]]; 

     if (fabsf(translation.x) > fabsf(translation.y)) { 

      if (translation.x > 0) 
       return YES; 
     } 
    } 
    return NO; 
} 

はなかったですこの問題を引き起こしている可能性のあるUIPanGestureRecognizer(または単に平文UIGestureRecognizer)の変更は何ですか?

+0

ジェスチャ認識機能が動作していないと思われるときに 'x> y'チェックが早期に終了していないことを確認しましたか? – RyanR

+0

残念ながら私のデバイスではバグを再現することさえできませんが、自分が何をやっているのかわからない単なるユーザーではないことを知っているユーザーから十分なレポートを受け取りました。 – bmueller

+1

私はこれが数回起こるようになった。 'gestureRecognizerShouldBegin'が呼び出され、' YES'を正しく返しますが、 'UIPanGestureRecognizer'に割り当てるメソッドは呼び出されません。だからジェスチャーを認識しますが、メソッドを呼び出さない... – bmueller

答えて

12

私は最終的にこの問題を解決したと思います。どうやら、iOS 7では、iOS 6以前とは違って、サブビューでジェスチャーが処理されているようです。これを処理するために、Appleは新しい代理人を実装しました:

(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 

はいを​​返すと、ジェスチャ認識機能が動作するはずです。私はそれを実装したことがありませんでしたが、今までに何の問題も生じていませんでした(確かにこれは私が決して確実に再現できない珍しいバグだったので、まだ再発していない可能性があります)。

詳細については、 https://stackoverflow.com/a/19892166/1593765を参照してください。

+1

すばらしいキャッチ!ありがとうございました! :-) – kernix

+0

私はこのバグもUIPanGestureRecognizerで持っています、方向は左/右のデリゲートでは動作しません。何らかの種類の画像では、私は説明を見つけることができません。 ! –

+0

驚くばかりのヒント!これでかなりの時間を費やす! –

0

gestureRecognizerShouldBeginの理由だけで、ジェスチャ認識機能でNOを返すのはなぜですか?動きは垂直方向のみですか? 指でユーザーが作ったジェスチャー(機械で作っていないジェスチャー)なので、指の動きの不正確さのために動きがランダムになることは常にあります。 gestureRecognizerShouldBegin:ユーザーが画面にタッチした直後に呼び出され、取得した翻訳は数ピクセルにすぎません。あなたの認識装置は、たとえ彼が200ピクセル右に移動したとしても、ユーザーが画面上に指を置くと失敗します。 これは、ジェスチャ認識機能を永久に無効にするべきではありませんが、ユーザのジェスチャが一見何の理由でも認識されないときにユーザを混乱させる可能性があるので、同様に調べるべきです。

関連する問題