如何完成两个UIViews之间的“90%幻灯片”

我有一个特定的场景,我试图效仿,对于Cocoa Touch来说是相当新的,我不确定完成它的最佳方式。 请原谅我缺乏的战术知识 希望有一些清楚的说明会有所帮助。

我想仿效的是:

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

在这里输入图像说明

当这个齿轮被触摸或刷新时,会发生两个主要的UIView变化:

  1. 原来的UIView在屏幕上滑动了90%左右( 关键在于它不会一直向上滑动)。
  2. 一个新的UIView滑了起来,以填补这个新腾出的90%的空间。

在这里输入图像说明

这是我想要完成的基本function。

实现想法#1:单个UIViewController瓦特/多个UIViews

起初,我认为有一个UIViewControllerpipe理“主”和“设置”的意见。 在这种情况下,以适当的方式转换这些观点将是相当简单的事情。

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

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

这是我目前正在走下的路线。 它将两个离散的function集合分离成单独的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%的路”。 它看起来更像是要完全转换出一个“旧”控制器和一个“新”控制器,即使我对两个UIViews的框架调整不应该是“完成”的动作。

我在哪里喜欢指导

我不是要求一个完整的解决scheme – 你的专业知识将是太昂贵了。 :)这就是说,这是相当新的,我会喜欢你的洞察什么是正确的做法。 请让我知道,如果我可以提供进一步的信息。

谢谢!

我认为你的第二个方法是正确的轨道上,你使用transitionFromViewController:ToViewController的直觉也是正确的 – 我不会使用这种方法,如果你想两个视图控制器存在和活跃。 所以,我想控制器的齿轮视图是自定义容器控制器的子视图控制器,然后像屏幕一样将第二个子屏幕添加到底部。 然后使用animateWithDurationanimation两个视图:…在最后,animation,你应该有你想要的,你的容器控制器将有两个孩子。