0

私はIOSプログラミングの初心者で、現在2つのタブがあるタブバーアプリケーションを持っています。2つの質問があります。

最初のタブは地図を示しています。いくつかの画鋲でそれを想像してください。ナビゲーションバーにボタンがあり、これをクリックすると、マップビューを移動し、リストビューを表示します。画像からUIを確認できます。ボタンはリストと呼ばれます。

リストをクリックすると、このビューが消えてリストビューが表示されます。質問は次のとおりです。

1)これを行うにはどうすればよいですか?ナビゲーションモデルを試しましたが、戻るボタンが必要ないため、これは必要ありません。2つの異なるビューを作成しようとしましたが、ボタンをそのビューにドラッグしただけですが、アプリがクラッシュします。ナブバーのリストボタンが欲しいだけです。クリックすると、ビューがリストビューに変わり、ボタンのテキストがマップに変わります。したがって、ボタンをもう一度クリックすると、マップビューに戻り、ボタンがリストに変わります。

2)このためのアニメーションをどのように実現しますか?ページがめくるアプリを見たり、不透明度を下げるなどのオプションを見たりしましたが、めくりアニメーションを実現したいと思います。

助けてくれてありがとう。ほんとうにありがとう。

4

2 に答える 2

1

InterfaceBuilderはこれのほとんどを行うことができます。コントロールキーを押しながら、マップViewControllerの「List」というタイトルのUIBarButtonItemをリストViewControllerにドラッグし、アクションセグエ「モーダル」を選択します。セグエを表す矢印が表示されます。それをクリックし、属性インスペクタを使用して、トランジションを「水平方向に反転」に変更します。これがビデオです

または、 presentViewController:animated:completionを使用してプログラムでこれを行うこともできます。

リストからマップに戻るには、プログラムで実行する必要があると思います。dismissViewControllerAnimated:completion:「Map」というタイトルのリストViewControllerのUIBarButtonItemを呼び出してトリガーするメソッドを作成します。

于 2012-12-17T15:28:27.017 に答える
0

あなたのコメントを読んだ後、私は疑問に思っています...あなたのアプリの構造が論理的にタブ付きのアプリ構造である場合(実際にあなたはそれを「タブバーアプリケーション」と呼んでいます)、あなたはUITabViewControllerの代わりにUITabViewControllerを使用することを検討すべきではありませんNavigationController?結局のところ、それはそれが行うように設計されていることです。

TabViewControllerを使用する場合は、フリップアニメーションの必要性を再検討する必要があります。これは、タブのUIに意味がないためです。フリップアニメーションを省くことができれば、TabViewControllerが良い方法である可能性があり、アイデアを却下する前に、少なくともそれを試してみる必要があります。また、成長するように設計されています...タブバーに任意の数のタブを組み込むことができます。アップルのドキュメントをチェックしてください(写真付き!)

タブが画面の下部にあるのに対し、「タブ」navControllerボタンは画面上部のナビゲーションバーにあることに気付くでしょう。これは、アプリの成長に合わせて役立ちます。これは、UIデザインの観点から、プログラム的に、navControllerを個々のタブ内のナビゲーションツールとして組み込むのが簡単だからです。たとえば、マップ/リストフリップルーチンがアプリのこの部分に実際に意味がある場合は、これを単一のタブ(独自のnavigationController内)として保持し、アプリの他の部分に他のタブを追加できます...

update
あなたのコメントから、あなたはnavController-inside-tabBarControllerのセットアップに興味があると言っています。この場合、フリップトランジションを取得し、戻るボタンを取得しない方法がいくつかあります。

(1)モーダル表示 必要なものを取得する最も簡単な方法は、viewControllerの1つ(マップビューなど)を設定して、もう1つ(リストビュー)をモーダルで表示することです。

ストーリーボードの場合:

  • 写真のようにlistViewに移動するためのナビゲーションバーボタンを備えたnavControllerにmapViewControllerを埋め込みます
  • listViewControllerをストーリーボードに追加し、それを独自のnavContoller(mapViewControllerのnavControllerではない)に埋め込みます。barButtonItemをこのnavControllerにドラッグし、listViewControllerのIBActionに接続します。
  • Ctrlキーを押しながらmapViewControllerの「list」ボタンからlistViewControllerにドラッグして、セグエを作成します。セグエを選択し、属性インスペクターでセグエタイプを「モーダル」に設定し、トランジション「水平方向に反転」と「アニメーション」をチェックします。コードで参照する場合に備えて、名前を付けてください。
  • listViewControllerのIBActionに次を追加します。
    [[self presentingViewController] dismissViewControllerAnimated:YES completion:nil];

それはあなたの結果を達成するはずです。完了ブロックを使用して、リストビューからマップビューに情報を送り返したり、マップビューをlistViewのデリゲートとして設定したりできます。

ストーリーボードを使用していない場合は、このアップルガイドを確認してください

他のViewControllerからの
ViewControllerの提示、特に「ViewControllerの提示と遷移スタイルの選択」。

このアプローチには1つの落とし穴があります。提示されたビューが画面に反転すると、タブバーを含む前のビュー全体が邪魔にならないように反転します。これは、ユーザーがアプリで他のことを行う前に閉じる必要があるモーダルビューであるという考え方です。

(2)単一のnavControllerでのプッシュ/ポップ これが意図に合わない場合は、ビューのプッシュとポップを備えた単一のNavigationControllerを使用してナビゲートでき、戻るボタンを非表示にできます...しかし、実際には新しいマップビューはなく、mapViewに戻りたい場合の戻るボタン機能。

戻るボタンを非表示にするには、次のことを試してください。

        self.navigationItem.hidesBackButton = YES

最上部のviewControllersでviewDidLoad

次に、この種のIBActionを使用して、xib/storyboardにbarButtonItemを追加できます。

[self popViewControllerAnimated:NO]

また

[self popToRootViewControllerAnimated:NO] 

UINavigationControllerの組み込みとしてサポートされていないため、コードでフリップアニメーションを作成する必要があります(読者の練習問題として残しておくことをお勧めします)。

(3)単一のviewControllerでビューを交換する ghettopiaが示唆しているように、navController内で(または手動で配置したnavBarを使用して)単一のviewControllerを使用し、UIViewクラスメソッドを使用して2つのビューを交換できます
transitionFromView:toView:duration:options:animations:completion
transitionWithView:duration:options:animations:completion

リストとマップは基本的に同じデータモデルの2つのビューであるため、これは優れた単純化ソリューションになる可能性があります。

于 2012-12-17T23:14:27.493 に答える