iphone - 在 View Controller 、iOS 应用程序之间切换

标签 iphone objective-c

我已经在天气应用程序上工作了几个星期。我目前有 4 个 View Controller 设置和运行。当前所有内容都链接到我的选项卡栏 Controller ,但我需要在选项卡上有更多空间,并且 3 个 View Controller 是相似的。我不确定最好的方法是什么。这 3 个类似的 View Controller 是预测 Controller ,一个是当前条件,一个是扩展预测,第三个是周末 View 。我想做的是将当前 Controller 链接到选项卡栏(足够简单),并可以选择将 View 从当前 View 切换到其他选项。我尝试添加另一个选项卡栏 Controller ,但我不喜欢两个选项卡栏 Controller 的外观。我添加了一张图片,以便您可以看到它当前的设置方式,基本上我想消除最后 2 个选项卡并通过第二个选项卡访问它们。关于实现这一目标的最佳最有效方法有什么建议吗?

enter image description here

enter image description here

最佳答案

这实际上更像是一个 UI 设计问题,而不是一个编程问题……但无论如何我都会添加一些编程。

我建议您将三个预测放在一个支持分页的 ScrollView 中。那么您只需要一个选项卡,就可以让用户在预测之间滑动:

paging weather view

您还可以在 iOS 6 上使用 UIPageViewController 实现此滚动,方法是将其 transitionStyle 设置为 UIPageViewControllerTransitionStyleScroll

为了让用户知道有多个预测可用,您可以添加 UIPageControl ,如果你能在那个相当繁忙的预测屏幕上找到空间的话。

让用户了解其他预测页面的另一种方法是在 ScrollView 出现时弹起它。这就是编程进来的!

在预测选项卡的 View Controller 中执行此操作:

- (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];
        }
    }];
}

如果 ScrollView 显示最左侧的页面,此代码会在出现预测选项卡时使 ScrollView 稍微弹起。您可能还想在用户看到几次后停止弹跳。无论如何,它看起来像这样:

bounce

如果用户尝试在弹跳发生时开始拖动,您需要取消动画。您可以通过将 View Controller 指定为 ScrollView 的委托(delegate)并实现此委托(delegate)方法来做到这一点:

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
    [scrollView_.layer removeAnimationForKey:@"bounds"];
}

我认为没有一种简单的方法可以使用 UIPageViewController 进行弹跳。

关于iphone - 在 View Controller 、iOS 应用程序之间切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13609932/

相关文章:

c++ - 在 ObjC 中创建 csv 文件

ios - UITextView 可以从底边开始填充文本吗?

iphone - UISearchBar透明背景 View

iphone - iOS 操作表

iphone - 如何通过 iPhone 对网站用户进行身份验证

ios - 多个 UIPickerViews - UIPickerView 不可见

iphone - 比 -forwardInspiration : to perform messages on a specific thread 更快的方法

objective-c - 绑定(bind)到包含字典数组的 NSUserDefaults

ios - iOS:当用户在IOS Xcode中从一个屏幕移动到另一个屏幕时,SVProgressHUD不会关闭

ios - 没有主键的 MagicalRecord 导入