現在、4 つのビュー コントローラーをセットアップして機能させています。現在、すべてがタブバーコントローラーにリンクされていますが、バーにもっとスペースが必要で、3 つのビューコントローラーが似ています。これを行う最善の方法がわかりません.3つのようなビューコントローラーは予測コントローラーで、1つは現在の状態、1つは拡張予測、3つ目は週末のビューです。私がやりたいのは、現在のコントローラーをタブバーにリンクし (簡単に)、ビューを現在のビューから他のオプションに切り替えるオプションがあることです。別のタブ バー コントローラーを追加しようとしましたが、2 つのタブ バー コントローラーの外観が気に入りませんでした。写真を追加しましたので、現在の設定方法を確認してください。基本的に、最後の 2 つのタブを排除し、2 番目のタブからアクセスしたいと考えています。この目標を達成するための最も効果的な方法について何か提案はありますか?
2 に答える
これは実際には、プログラミングの問題というよりも UI デザインの問題です…しかし、とにかくプログラミングを入れます。
3 つの予測を、ページング対応の単一のスクロール ビューに配置することをお勧めします。次に、1 つのタブだけが必要で、ユーザーが予測間をスワイプできるようにします。
に設定することUIPageViewController
により、iOS 6 でこのスクロールを実装することもできます。transitionStyle
UIPageViewControllerTransitionStyleScroll
複数の予測が利用可能であることをユーザーに認識させるためUIPageControl
に、かなり忙しい予測画面で余裕がある場合は、 を追加できます。
ユーザーに他の予測ページを認識させるもう 1 つの方法は、スクロール ビューが表示されたときにバウンスすることです。これがプログラミングの登場です!
[予測] タブのビュー コントローラーでこれを行います。
- (void)viewDidAppear:(BOOL)animated {
[self bounceScrollViewIfNeeded];
}
- (void)bounceScrollViewIfNeeded {
if (scrollView_.contentOffset.x != 0)
return;
[UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionAllowUserInteraction animations:^{
scrollView_.contentOffset = CGPointMake(20, 0);
} completion:^(BOOL finished) {
if (finished && !scrollView_.tracking) {
[UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionAllowUserInteraction animations:^{
scrollView_.contentOffset = CGPointZero;
} completion:nil];
}
}];
}
このコードは、スクロール ビューが左端のページを表示している場合、予測タブが表示されたときにスクロール ビューを少しバウンスさせます。ユーザーがバウンスを数回見た後、バウンスを停止することもできます。とにかく、次のようになります。
バウンスが発生している間にユーザーがドラッグを開始しようとすると、アニメーションをキャンセルする必要があります。これを行うには、View Controller をスクロール ビューのデリゲートとして割り当て、次のデリゲート メソッドを実装します。
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
[scrollView_.layer removeAnimationForKey:@"bounds"];
}
でバウンスを行う簡単な方法はないと思いますUIPageViewController
。
UISegmentedControl
ビューの上部でa を使用することを検討します。UIViewController
ビューが十分に類似していて、同じクラスを使用してわずかな違いだけで表示できる場合、これは簡単な解決策です。
ビューが大きく異なり、同じ でビューを制御するのが不便な場合は、コンテナーUIViewController
ビューを使用するのが好きですが、それらは iOS 6 でのみ使用できます。メソッドでは、他のセグメントのコンテナー ビューを非表示にし、現在選択されているコンテナー ビューを再表示します。UIViewController
UIView
segmentedControlValueChanged: