如何实现两个UIViews之间的“90%幻灯片”

时间:2013-08-07 15:22:49

标签: ios cocoa-touch uiview uiviewcontroller uiviewanimation

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

我想要模仿的内容:

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

enter image description here

触摸或滑动齿轮时,会发生两个主要的UIView变化:

  1. 最初的UIView在屏幕上滑动了大约90%(点是它不会向上移动所有。)
  2. 新的UIView滑起来填补新腾空的90%空间。
  3. enter image description here

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

    实施理念#1:具有多个UIViews的单个UIViewController

    首先,我考虑使用单个UIViewController管理“主”和“设置”视图。在这种情况下,以适当的方式转换这些视图是一件相当简单的事情。

    那就是说,这对我来说似乎有些混乱。根据我的两组功能的强大程度,这是一个重载单个UIViewController的方法。你可能会告诉我那没关系,但不管怎么说,看起来太多了。

    实施理念#2:自定义容器ViewController中的多个UIViewControllers

    这是我目前要走的路线。它将两个离散的功能集分成单独的UIViewControllers(包含在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%的方式”。它看起来更像是完全转换出“旧”控制器和“新”控制器,即使我对两个UIViews的帧调整不应该是“完整”移动。 / p>

    我喜欢指导的地方

    我不是要求一个完整的解决方案 - 你的专业知识太贵了。 :)那就是说,对于这个相当新,我希望你能够了解正确的方法。如果我能提供进一步的信息,请告诉我。

    谢谢!

1 个答案:

答案 0 :(得分:1)

我认为你的第二种方法是正确的,你对使用transitionFromViewController:ToViewController的直觉也是正确的 - 如果你想让两个视图控制器都存在并且活动,我就不会使用那种方法。所以,我会让带有齿轮视图的控制器成为自定义容器控制器的子视图控制器,然后像你一样将第二个子屏幕添加到底部。然后使用animateWithDuration为两个视图设置动画:...在动画结束时,你应该拥有你想要的东西,而容器控制器将有两个孩子。