我已经在天气应用程序上工作了几个星期。我目前有 4 个视图控制器设置和运行。当前所有内容都链接到我的标签栏控制器,但是我需要在栏上有更多空间,并且 3 个视图控制器是相似的。我不确定最好的方法是什么。3 个类似视图控制器是预测控制器,一个是当前条件,一个是扩展预测,第三个是周末视图。我想做的是将当前控制器链接到标签栏(很容易),并可以选择将视图从当前视图切换到其他选项。我尝试添加另一个标签栏控制器,但我不喜欢两个标签栏控制器的外观。我添加了一张图片,以便您查看当前的设置方式,基本上我想消除最后两个选项卡并通过第二个选项卡访问它们。关于实现这一目标的最佳最有效方法的任何建议?
2 回答
这实际上更像是一个 UI 设计问题,而不是一个编程问题……但无论如何我都会加入一些编程问题。
我建议您将三个预测放在一个支持分页的滚动视图中。然后你只需要一个标签,你就可以让用户在预测之间滑动:
您还可以UIPageViewController
在 iOS 6 上通过将其设置为transitionStyle
来实现此滚动UIPageViewControllerTransitionStyleScroll
。
为了让用户知道有多个可用的预测,您可以添加一个UIPageControl
,如果您可以在那个相当繁忙的预测屏幕上找到它的空间。
让用户了解其他预测页面的另一种方法是在滚动视图出现时反弹它。这是编程进来的!
在预测选项卡的视图控制器中执行此操作:
- (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];
}
}];
}
如果滚动视图显示最左边的页面,则此代码在出现预测选项卡时使滚动视图弹跳一点。您可能还想在用户看到几次后停止反弹。无论如何,它看起来像这样:
如果用户在弹跳发生时尝试开始拖动,则需要取消动画。您可以通过将视图控制器分配为滚动视图的委托并实现此委托方法来做到这一点:
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
[scrollView_.layer removeAnimationForKey:@"bounds"];
}
我认为没有一种简单的方法可以使用UIPageViewController
.
我会考虑UISegmentedControl
在视图顶部使用 a 。如果视图足够相似,可以使用相同的UIViewController
类仅以微小的变化显示它们,那么这是一个简单的解决方案。
如果视图差异很大以至于不方便控制同一视图中的视图UIViewController
,我喜欢使用容器视图,尽管它们仅在 iOS 6 中可用。您可以将UIViewController
使用嵌入 segue 嵌入到容器视图的UIView
. 在该segmentedControlValueChanged:
方法中,只需隐藏其他段的容器视图并取消隐藏当前选择的容器视图。