[英]Switching between view controllers, iOS application
我已经在天气应用程序上工作了几个星期。我目前有4个视图控制器的设置和运行。 当前所有内容都链接到我的标签栏控制器,但是我需要在栏上留出更多空间,而视图控制器中的3个相似。 我不确定做到这一点的最佳方法是什么。像视图控制器这样的3种是预测控制器,一种是当前条件,一种是扩展的预测,第三种是周末视图。 我想做的是将当前控制器链接到选项卡栏(很简单),并可以选择将视图从当前视图切换到其他选项。 我尝试添加另一个标签栏控制器,但我不喜欢使用两个标签栏控制器的外观。 我添加了一张图片,以便您可以看到当前的设置方式,基本上,我想删除最后两个选项卡并通过第二个选项卡进行访问。 关于实现此目标的最佳方法的建议?
实际上,这实际上是一个UI设计问题,而不是一个编程问题……但是无论如何,我都会进行一些编程。
我建议您将这三个预测放在一个启用分页的滚动视图中。 然后,您只需要一个标签,就可以让用户在预测之间滑动:
您还可以通过在iOS 6上使用UIPageViewController
来实现此滚动,方法是将其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
。 如果视图足够相似,可以使用相同的UIViewController
类以很小的变化显示它们,那么这是一个简单的解决方案。
如果视图之间的差异足够大,以至于在同一UIViewController
控制视图会UIViewController
,那么我还是喜欢使用容器视图,尽管它们仅在iOS 6中可用。您可以使用嵌入序列将UIViewController
嵌入到容器视图的UIView
。 在segmentedControlValueChanged:
方法中,仅隐藏其他段的容器视图,然后取消隐藏当前选定的容器视图。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.