1

テーブルビューにスワイプジェスチャを配置しました。しかし、テーブルビューは20回に1回ジェスチャーを検出していますか?? なぜこれがこのように起こっているのですか?

最初に、以下のコードを使用してそのコントローラーを別のコントローラーに追加しました。

obj = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil];

CGRect rectFrame = obj.view.frame;
rectFrame.origin.x += 320.0f;
[obj.view setFrame:rectFrame];
[self.view addSubview:obj.view]; 

RootViewController には、左右にスワイプするときにビュー全体をスワイプする必要があるテーブルが含まれています。

4

1 に答える 1

3

いくつかの考え:

  1. 基本的なプロセス:テーブルビューを右側に追加していることを考えると、左にスワイプして所定の位置にスライドさせたいと思います。そのジェスチャーは、テーブル ビューではなく、メイン ビューにある必要があります。次に、右にスワイプして右にスライドさせて戻すと仮定すると、そのジェスチャーはこのobj子コントローラーで行われます。

  2. UIScrollView サブクラスを扱うときの標準的なジェスチャーの警告:テーブルビューの上のスワイプ ジェスチャーは、実際には 100% 信頼できるわけではありません。スワイプジェスチャではなく、テーブルビューのパンとして処理されます。しかし、それは小さな UI の問題です。(余談ですが、これが、テーブルビュー自体ではなく、画面上部のナビゲーション バーにスワイプ/パン ジェスチャを追加するアプリが増えている理由です。)

  3. 改良点:標準のスワイプ ジェスチャを使用している場合、directionUISwipeGestureRecognizerDirectionLeftまたは...Rightに設定するだけで、ジェスチャ認識システムはジェスチャを適切に検出し、現実世界のバリエーションを処理するなど、非常にうまく機能します。自分で身振りをする (またはtouchesイベントをいじる) と、ロジックの制限が厳しすぎる場合 (たとえば、y.

要するに、まだ問題がある場合は、ジェスチャ作成コードを共有してください (ジェスチャが条件付きロジックを適用する場合は、ジェスチャ コード自体も)。


当面の問題とは関係ありませんが、ビュー コントローラーについて常に iOS に通知することをお勧めします。WWDC 2011 - Implementing View Controller Containmentを見ると、ビュー階層がコントローラー階層と同期しなくなる危険性について警告されます。

つまり、コントローラーのビューをサブビューとして追加するだけでは十分ではありません。幸いなことに、修正は非常に簡単です。View Controller コンテインメントを実装できます。したがって、子コントローラーを追加するには、サブビューを追加する前に次のように呼び出す必要があります。

[self addChildViewController:obj];

サブビューを追加してそのフレームの構成を完了したら、iOS に完了したことを伝えます。

[obj didMoveToParentViewController:self];

これら 2 つの呼び出しを行わないと、View Controller に配信されない iOS イベントが発生する可能性があります。

于 2013-03-02T16:08:52.343 に答える