1

我有一个我正在尝试模仿的特殊场景,而且对于 Cocoa Touch 来说还很陌生,我不确定实现它的最佳方法。请原谅我缺乏战术知识;希望一些明确的说明会有所帮助。

我想效仿的:

我正在查看的应用程序(特别是)是Beat。下面是其中一个 UIView 的示例 - 特别是,请注意底部设置的齿轮图标。

在此处输入图像描述

当该齿轮被触摸或向上滑动时,会发生两个主要的 UIView 更改:

  1. 原始的 UIView 在屏幕上滑动了大约 90%(关键是它不会一直向上滑动
  2. 一个新的 UIView 向上滑动以填充新腾出的 90% 空间。

在此处输入图像描述

这是我想要完成的基本功能。

实施理念 #1:单个 UIViewController w/多个 UIViews

起初,我考虑让一个 UIViewController 同时管理“主”和“设置”视图。在这种情况下,以适当的方式转换这些视图将是一件相当简单的事情。

也就是说,这对我来说似乎有点混乱。根据我的两组功能的强大程度,这是重载单个 UIViewController 的方法。你可能会告诉我这没关系,但说实话,这似乎太多了。

实现思路 #2:自定义容器 ViewController 中的多个 UIViewController

这是我目前正在走的路线。它将两个离散的功能集分离为单独的 UIViewController(包含在 Container ViewController 中),并通过以下方式在两者之间进行转换:

- (void)flipFromViewController:(UIViewController *)fromController
              toViewController:(UIViewController *)toController
{
    CGFloat width = self.view.frame.size.width;
    CGFloat height = self.view.frame.size.height;

    fromController.view.frame = CGRectMake(0.0f, 0.0f, width, height);
    toController.view.frame = CGRectMake(0.0f, height, width, height);

    [self addChildViewController:toController];
    [fromController willMoveToParentViewController:nil];

    [self transitionFromViewController:fromController
                      toViewController:toController
                              duration:0.5f
                               options:UIViewAnimationOptionTransitionNone
                            animations:^(void) {
                                fromController.view.frame = CGRectMake(0.0f, -(height - 100.0f), width, height);
                                toController.view.frame = CGRectMake(0.0f, 100.0f, width, height);
                            }
                            completion:^(BOOL finished) {
                                [fromController removeFromParentViewController];
                                [toController didMoveToParentViewController:self];
                            }];
}

问题在于过渡:它似乎并没有停止“90%的方式”。它看起来更像是打算完全过渡出“旧”控制器和“新”控制器,即使我对两个 UIView 的框架调整不应该是“完整”的移动。

我在哪里需要指导

我不是要一个完整的解决方案——你的专业知识太昂贵了。:) 就是说,对此相当陌生,我希望您能深入了解正确的方法。如果我能提供更多信息,请告诉我。

谢谢!

4

1 回答 1

1

我确实认为您的第二种方法是正确的,并且您对使用 transitionFromViewController:ToViewController 的直觉也是正确的——如果您希望两个视图控制器都存在并处于活动状态,我不会使用该方法。所以,我会让带有齿轮视图的控制器成为自定义容器控制器的子视图控制器,然后像你一样将第二个屏幕外的子视图添加到底部。然后使用 animateWithDuration 动画两个视图:...最后,动画,你应该有你想要的,你的容器控制器将有两个孩子。

于 2013-08-07T16:03:18.163 回答