4

タブバーを模倣したボタンの行を含むカスタムコントロールがあります。このコントロールUINavigationControllerは、ルート ビュー コントローラーから移動するとスライドして表示されなくなり、ルートに移動するとスライドして戻ります。

iOS 7 ではUIScreenEdgePanGestureRecognizer、スワイプして戻るジェスチャを提供する があります。したがって、スライド量がUIScreenEdgePanGestureRecognizerの翻訳に対応するように、カスタム コントロールを変更しています。

問題は、ユーザーがタッチを離したときにUINavigationController、元のビューに戻るかバウンスするかをどのように判断するかです。

[self.interactivePopGestureRecognizer addTarget:self action:@selector(panningBack:)];


- (void) panningBack:(UIPanGestureRecognizer *)recognizer
{
    // Snipped - Code that reads the recognizer translation and adjust custom control y position

    if (recognizer.state == UIGestureRecognizerStateEnded)
    {
        // Question: Does it go back, or does it not?

        // If it goes back, slide custom control into view
        // Else slide custom control out of view
    }
}
4

2 に答える 2

1

最も簡単な解決策は、ナビゲーション コントローラーに実装されている既定のジェスチャを使用することです。ビューが表示されたらバーを表示し、バーが消えると非表示にします。

戻るかどうかを知るための洗練された解決策は、最後の動きを検出することです。

つまり、ユーザーが数ピクセル左に移動して離した場合 -> ユーザーが数ピクセル右に移動して離した場合に跳ね返る -> 前のコントローラーを表示する

これは、ロケーションを変更済みの状態で保存し、それを終了済みの状態と比較すると実行できます。

次のようにポイントを取得します。

CGPoint point = [レコグナイザ locationInView:view];

于 2013-10-23T20:55:31.947 に答える