私は、FacebookのようなスライドオーバーのUITableViewを使用します。UINavigationViewを一時的に移動する - Facebookのスタイル
私はアニメーションと影、すべてをドロップする、ことを成し遂げてきました。私の心配は、私がそれを完全に間違ったやり方にしていることです。
アプリケーションには、UINavigationControllerである(UIWindowの)rootViewControllerがあります。 UINavigationController(そのルートビューコントローラ)内のビューには、leftBarButtonItemプロパティが設定されています。ボタンが押されたときに実行されるコードを次に示します。
- (void)showFeedList {
//set the feed list as showing even before it is
feedListShowing = YES;
//to show the feed list, we need to instanciate one
feedSelectionListViewController = [[FeedSelectionListViewController alloc] initWithNibName: @"FeedSelectionListViewController" bundle: nil];
//set the frame to 200 points to the left of the screen
feedSelectionListViewController.view.frame = CGRectOffset(feedSelectionListViewController.view.frame, -200, 20);
NSInteger offset = feedSelectionListViewController.view.frame.size.width;
//store a pointer to the root navigation controller, and add the list view controller's view to the navigation controller's view
UINavigationController *navigationController = (UINavigationController *)UIApplication.sharedApplication.delegate.window.rootViewController;
[navigationController.view addSubview: feedSelectionListViewController.view];
//animate the navigation bar, feed selection list, and this view controller's view to the right
[UIView animateWithDuration: LIST_SHOW_TRANSITION_TIME animations: ^{
self.view.frame = CGRectOffset(self.view.frame, offset, 0);
navigationController.navigationBar.frame = CGRectOffset(navigationController.navigationBar.frame, offset, 0);
feedSelectionListViewController.view.frame = CGRectOffset(feedSelectionListViewController.view.frame, offset, 0);
}];
}
これは本当に面倒なことであり、すべてが正しく機能するわけではありません。最初に、ユーザーが離席してアプリケーションに戻ると、UINavigationBarはフレームをリセットしたように見えます。これは、通話ステータスバーがオンまたはオフに切り替わったときにも発生します。第2に、右のビュー内のビューは、右に移動しません。なぜこれがわからないのですか?私は
navigationController.view.frame = CGRectOffset(navigationController.view.frame, 200, 0);
でアニメーションブロックを交換する場合
しかし、それは正常に動作します。ナビゲーションコントローラによって現在表示されているビューのサブビューはそれに応じて移動し、アプリケーションが再開されるとすべてが適切な場所に配置されます。ただし、サイドバービューはタッチイベントを受け取っていないため、サイドバー上でタッチされたタッチはAppDelegateによって処理されます。私はUIViewのフレームが{-200,0}の原点を持っているため、これが疑わしいですが、私は確信することはできません。
私は何かを理解しているとは思わない。これはこれを行う正しい方法ですか?私はそれをやっている他の方法を考えることができません。とにかく、事前にあらゆる案内や提案がありがとうございます。
-mattあなたがやろうとしているまさに何あなたはすでに鉱山https://github.com/pkluz/PKRevealController
のこのライブラリを備えている探している
あなたのソリューションを使用するように魅力的ですが、これは私の学校の新聞のRSSリーダーが好きな私の先生のためのプロジェクトです。私はとても忙しい学生なので、申し込みをする言い訳が大好きです。私は最近、UIKitの高度な使い方で遊ぶのに多くの時間がなかったので、私は自分のスキルをアップして自分自身を実装したいと思います(私はドラッグするだけではなく、タップするだけです)、それは本当に私は何が起こっているのか分からないのです。 - 要するに、私は物事が単にそれを受け入れるのではなく、その理由を知りたいのです。 –
あなた自身の解決策にあなたをより良く導くための編集を追加しました。 – pkluz
私は、UIViewControllerの包含メソッドを実装する独自のUIViewControllerを作成する方法を検討しています。あなたの指導に感謝します。 - しかし、私はまだ私は何がうまくいかなかったのか、とても混乱しています。私は本当になぜUINavigationBarが元の場所に戻ってきたのか、なぜUIViewがタッチイベントを受け取っていなかったのか、そしてUIViewのフレームを変更してもサブビューが変わっていないことを知りたいのです。それはすべて非常に混乱しています。 –