我有一个我正在尝试模仿的特殊场景,而且对于 Cocoa Touch 来说还很陌生,我不确定实现它的最佳方法。请原谅我缺乏战术知识;希望一些明确的说明会有所帮助。
我想效仿的:
我正在查看的应用程序(特别是)是Beat。下面是其中一个 UIView 的示例 - 特别是,请注意底部设置的齿轮图标。
当该齿轮被触摸或向上滑动时,会发生两个主要的 UIView 更改:
- 原始的 UIView 在屏幕上滑动了大约 90%(关键是它不会一直向上滑动)。
- 一个新的 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 的框架调整不应该是“完整”的移动。
我在哪里需要指导
我不是要一个完整的解决方案——你的专业知识太昂贵了。:) 就是说,对此相当陌生,我希望您能深入了解正确的方法。如果我能提供更多信息,请告诉我。
谢谢!