0

このトピックがある程度カバーされていることは知っていますが、投稿する必要があるものが正確にわかりません。見逃してしまったらお詫びします。基本的に、Facebookのスライドアウトナビゲーションメニューに非常によく似たものが欲しいです。ViewDeckの使用を示す投稿をここで見ましたが、さまざまな理由から、自分でロールしたいと思います。私のアプリはナビゲーションコントローラーに基づいており、メニュービューの表示を切り替えるボタンをナビゲーションバーに配置する予定です。

ここでの私の質問は、そのようなビューを一般的に作成および管理する方法ではありませんが、より具体的には、このビューのビューコントローラーを作成し、現在ナビゲーションの上にあるビューコントローラーに関係なく、常に存在して利用できるようにするにはどうすればよいですか?コントローラーのスタック?ストーリーボードを使用していて、最初に考えたのは、メインのナビゲーションコントローラーにコンテナービューを追加し、そこにメニュービューを追加することでしたが、予想どおり、ストーリーボードエディターでは、ナビゲーションコントローラーにビューを直接追加できません。私はこれが理にかなっていることを知っています、なぜ私がこれを行うことができないのかを私に説明する必要はありません、これを含めて、私がこのようなことをしたいという私のポイントを示すために-最上位のグローバルレベルで作成するので、常に私のアプリの各ViewControllerで作成する必要はありません。

私の質問が明確であることを願っています。念のため、私の考えを説明しましょう。最初のルートビューコントローラーにコンテナビューを追加した場合、新しいビューコントローラーを押してルートビューコントローラーから移動した後、横から隠れたりスライドしたりすることができました。ナビゲーションスタックの場合、このメニュービューは表示されなくなります。もちろん、アプリ内の個別のViewControllerごとに後で作成する必要はありません。

任意の提案や助けを大いに感謝します。

4

4 に答える 4

2

さて、私の提案が、あなたが探していて上で述べたものとまったく同じかどうかはわかりません. しかし、ビジュアル スケッチを描いてみましょう。

  1. メニュービューを UIViewController として作成し、必要に応じてデザインを設定します。
  2. それぞれのデリゲートに反応する Hide & Show メソッドを使用して、同じビューでメニュー アーキテクチャのデザインとロジックを実装します。これで、menuview は通常のビューとして準備が整いました。通常は、プッシュおよびポップしてナビゲートできます。さぁ、メインのショーが始まります。
  3. アプリには UINavigationController があるため、メニュービューを歓迎する UIButton を含むカスタム ツールバーがあります。
  4. ここで、アプリ全体の共通メニュー アクションを管理するために、menuview のシングルトン インスタンスが作成されます。最も重要なのは、UIWindow に追加されることです。
  5. そして、このシングルトン メニュービュー インスタンスは、カスタム ツールバー ボタンからの要件に従って、表示/非表示を要求します。
  6. 表示/非表示の要求に応じて、予想されるロジックでそれぞれのアニメーションを適用します。
  7. 非表示を要求している間、menuview は UIWindow から削除され、次に表示する必要があるときに UIWindow に再度追加されます。

うまくいけば、これでうまくいくかもしれません。誤解がある場合はお知らせください。

于 2013-02-26T17:47:18.123 に答える
1

JASidePanels(ここ)のような利用可能ないくつかのオープンソースコントロールを使用できます。

于 2013-02-26T17:41:05.403 に答える
1

私は実際に、あなたがやりたいことを正確に実行するプロジェクトを終了しました。

これが私が取ったステップです。

  • ビューコントローラーを作った
  • 左側にメニュー ナビゲーションを追加
  • メニュー ナビゲーションに UIView を追加する
  • このようなアニメーションで左右にスライドする IBActions を追加しました...

    [UIView animateWithDuration:.25f delay:0.0 options:0
                 animations:^{
                     [mainView setFrame:CGRectMake(0, mainView.frame.origin.y, mainView.frame.size.width, mainView.frame.size.height)];
    
                 }
                 completion:^(BOOL finished){
    }];
    
  • 同じView Controller内に追加のビューを追加

したがって、ほとんどの場合、1 つのメイン ビュー コントローラーがすべてのビューを保持し、ボタンまたは UIGestureRecognizers を使用して左右にスライドするようにアニメーション化するだけです。コンテナ ビューを使用して、そのメイン ビュー コントローラ内に子ビュー コントローラをネストし、コード側を管理しやすくすることができます。

于 2013-02-27T03:45:20.117 に答える
-2

提案をありがとう。まったく同じ動作をさせたくないという理由もあって、サードパーティのライブラリを使用したくありません。たとえば、サイド メニューがメイン ビューを邪魔にならないようにするのではなく、コンテンツ ビューの上にメニューを表示したいと考えています。また、ナビゲーションバーの下に表示したいです。さらに、私は適切なメニューを使用していないため、必要なものを処理するためのより軽いコードを使用することができます。

私は解決策を思いついたと思います。メニュー ビュー コントローラーを作成し、これへの参照をアプリ デリゲートに追加しました。ユーザーがどこにいても、メニュー ボタンをクリックすると、アプリ デリゲートのメソッドが呼び出され、メニューが非表示または表示されます。そのため、アプリ デリゲートはアニメーションを処理し、現在表示されているビュー コントローラーのサブビューとしてメニューを追加および削除します。

于 2013-02-26T19:27:27.887 に答える