繁体   English   中英

如何在两个UIView之间完成“ 90%的滑动”

[英]How to accomplish a “90% slide” between two UIViews

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

我想模仿的是:

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

在此处输入图片说明

触摸或滑动该齿轮时,将发生两个主要的UIView更改:

  1. 原来的UIView向上滑动屏幕的方式约90%( 关键点是,它并没有一路上涨滑动)。
  2. 新的UIView向上滑动以填充新腾出的90%空间。

在此处输入图片说明

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

实现思路1:单个UIViewController带有多个UIViews

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

也就是说,这对我来说似乎有些混乱。 根据我两组功能的健壮性,这是使单个UIViewController重载的秘诀。 您可能会告诉我,这没关系,但事实并非如此。

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

这是我目前要走的路线。 它将两个离散的功能集分离为单独的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%的方式”。 尽管我在两个UIView上的帧调整不应该是“完整的”动作,但看起来它似乎打算完全过渡为“旧”控制器和“新”控制器。

我要指导的地方

我并不是要一个完整的解决方案-您的专业知识将太昂贵了。 :)就是说,由于这还不算新,我希望您能对正确的方法有所了解。 如果可以提供更多信息,请告诉我。

谢谢!

我确实认为您的第二个方法是在正确的轨道上,并且您对使用transitionFromViewController:ToViewController的直觉也是正确的-如果您希望两个视图控制器都存在并处于活动状态,则我不会使用该方法。 因此,我希望齿轮视图的控制器成为自定义容器控制器的子视图控制器,然后像您一样将第二个子窗口添加到屏幕底部。 然后使用animateWithDuration动画两个视图:...最后,动画应具有所需的内容,并且容器控制器将具有两个子代。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM