【问题标题】:cube structure view controllers立方体结构视图控制器
【发布时间】:2012-03-22 19:54:01
【问题描述】:

我正在寻找一个应用程序,它有 6 个视图控制器,以立方体结构布局(而不是有一个用于导航的标签栏......)。我用这个例子来做立方体过渡:switch two view controller's view in a cube animation

然而,大多数示例(另一个:how does the CATransition work?)展示了如何在 UIViews 之间进行转换,而不是 UIViewControllers,这是我感兴趣的。

我的问题是:我如何使用 CATransition 在 UIViewController 之间进行转换,以及 - 我如何从一个 UIViewController 返回到另一个假设我正在使用 pushViewController: 方法(到目前为止,我一直在使用 presentModalViewController: 并获取返回(比如取消)使用了这个方法dismissModalViewControllerAnimated:)。

谢谢。

【问题讨论】:

    标签: iphone objective-c ios xcode uiview


    【解决方案1】:

    您不能使用 CATransition 在两个视图控制器之间切换,但您可以简单地使用视图控制器的视图并与另一个视图控制器的视图进行切换。

    iOS 5 引入了transitionFromViewController:toViewController:duration:options:animations:completion: 方法,使得使用 UIViewControllers 进行转换变得更加容易。

    最后,您仍将使用 UIViewControllers 的 UIViews。

    (实际上,您提供的链接正是您在两个 UIViewController 之间转换的方式。请记住,视图控制器仅管理视图而不是真正的视图本身。切换回来不会像 dismissModalViewControllerAnimated 那样容易:但有时自定义不是'不容易)。

    以下是使用 iOS 5 方法的示例:

    UIViewController *controller = [[UIViewController alloc] initWithNibName:nil bundle:nil]; [controller.view setBackgroundColor:[UIColor greenColor]];

    [self addChildViewController:controller];
    
    [self transitionFromViewController:self.redController toViewController:controller duration:0.8 options:0 animations:^{
        CATransition *transition = [CATransition animation];
        transition.delegate = self;
        transition.duration = 0.8;
        transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
        NSString *types[4] = {@"cube", @"rippleEffect", @"cube", @"alignedCube"};
        NSString *subtypes[4] = {kCATransitionFromLeft, kCATransitionFromRight, kCATransitionFromTop, kCATransitionFromRight};
    
        transition.type = types[0];
        transition.subtype = subtypes[1];
    
        [self.view.layer addAnimation:transition forKey:nil];
    } completion:^(BOOL finished) {
        [controller didMoveToParentViewController:self];
    }];
    

    请注意,您必须事先执行以下操作。

    [self addChildViewController:self.redController];
    [self.view addSubview:self.redController.view];
    

    在使用这些方法之前,您必须做一些事情。主要区别在于您将拥有比当前拥有的视图控制器多一个。这个额外的 UIViewController 充当其他两个的容器(有点像当前,self.view 是您拥有的两个 UIView 的容器)。

    【讨论】:

    • 所以如果我有两个不同的视图(比如一个活动提要和一个用户帐户信息),我应该使用一个 UIViewcontoller 和两个视图还是两个视图控制器并使用它们的两个 UIview?
    • 哦,是的,我可能应该更清楚。 transitionFromViewController: 的整个概念使开发人员可以创建 UIViewController 容器。 “self”实际上是其他两个 UIViewController 的容器(就像 UINavigationController、UITabBarController 和 UISplitViewController)。因此,您将在自定义 UIViewController 子类中键入答案中的所有代码。然后,您将当前视图控制器添加为子子项及其视图。在我的示例中,当前视图控制器是“self.redController”
    • 你将拥有三个 UIViewControllers,所以比你开始时多了一个。
    • 容器本身必须呈现第一个,因此在容器的 viewDidLoad 中,您将创建第一个视图控制器,将其添加为 childViewController,然后将第一个视图控制器的视图添加到 self.查看。
    • 使用视图控制器的好处是你可以简单地使用[self.parentViewController transitionFromViewController...
    猜你喜欢
    • 2012-12-24
    • 1970-01-01
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    相关资源
    最近更新 更多