4

正面図と右側面図を備えたPKRevealControllerがあります。パン ジェスチャが有効になっているので、スワイプで右側のビューを開くことができます。すばらしいです。別の方法でスワイプしても、開くべき左側のコントローラーがないため、何もしません。すばらしいです。代わりに、アプリの戻るナビゲーションをトリガーするスワイプ (左から右) を実装したいと考えています。

(前面) ビュー コントローラーにスワイプ ジェスチャ レコグナイザーを追加しましたが、何も起こりません。

Reveal コントローラーで RecognizesPanningOnFrontView:NO を設定すると、新しく追加したジェスチャ認識エンジンが機能し、元に戻ることができます。

だから、今はどちらかです。両方欲しい。どうやってやるの?

4

1 に答える 1

2

私は独自のソリューションを実装しました。PKRevealControllerスワイプ操作を許可および禁止する場合に別の解決策が必要だったため、実際には 2 つの解決策がありました。

ケース 1 :setRecognizesPanningOnFrontView:NO

このケースは非常に簡単です。メソッドUISwipeGestureRecognizerを呼び出すa を追加するだけです。back

UISwipeGestureRecognizer *backSwipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(back)];
[backSwipe setDirection:UISwipeGestureRecognizerDirectionRight];
[self.view addGestureRecognizer:backSwipe];

ケース 2 :setRecognizesPanningOnFrontView:YES

これは少し複雑です。ジェスチャ認識エンジンの競合を避けるために、私はPKRevealControllerのジェスチャ認識エンジンを利用する必要がありました。もちろん、これを実装しPKRevealControllerたのはleftViewController.

そのため、戻るスワイプ ナビゲーションを実装するクラスを通知のリスナーとして登録します。

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(back:)
                                             name:NOTIFICATION_BACK_SWIPE
                                           object:self];

次に、PKRevealController.m ファイルの- (void)moveFrontViewRightwardsIfPossibleメソッドで、通知を投稿するだけです。

[[NSNotificationCenter defaultCenter] postNotificationName:NOTIFICATION_BACK_SWIPE object:[(UINavigationController *)self.frontViewController topViewController]];

ここでは、通知のオブジェクトとして受信者自身を渡していUIViewControllerます。特定のUIViewControllerインスタンスのみがこの通知に反応するように、これを行っています。そうしないとUIViewControllersUINavigationControllerスタック内にこの通知を受信するためにサブスクライブしているものがさらにある場合、それらはすべてUINavigationControllerto を引き起こしpopViewController、これが 1 回だけ発生するようにしたいのに、ランダムな数のステップが戻ることになります。

それでおしまい。楽しみ。

于 2014-01-06T22:15:22.160 に答える