有许多关于使用新的 iOS 7 UIViewController 转换 API 和出色的新交互式转换 API 的教程。然而,这些似乎都没有提到以交互方式添加和删除子视图控制器,尽管在 WWDC 2013 关于自定义 UIViewController Transitions 的视频中,Apple 员工展示了我想象的带有自定义转换的子视图控制器:

enter image description here

(我假设这是一个视图控制器,看起来显示在另一个视图控制器之上。我不认为你可以过渡到一个新的 UIViewController,同时保持另一个在它后面可见......)

用子视图控制器可以实现这样的事情吗?

根据我的具体情况,我添加了一个 UIPageViewController 图像库作为子视图控制器,但如果图像是 UIPageViewController 不占用全屏。我还添加了将图像滑出屏幕的功能(类似于 iOS 7 多任务关闭),我希望它成为一个交互式视图控制器弹出窗口。

有这样的教程吗?有可能吗?这会更好地完成吗 presentViewController 不知何故,这将允许我查看下面的视图控制器?

有帮助吗?

解决方案

如果您再次观看视频,您会注意到在 12:15 他引用了受支持的演示风格 UIModalPresentationCustom. 。这种呈现样式意味着“来自”视图控制器的视图不会从视图层次结构中删除,从而允许您创建自己的表单。因此,在您的情况下,您将执行以下操作:

//insert code where you want the presentation to begin

UIPageViewController *pageVC = [[UIPageViewController alloc] init];
pageVC.modalPresentationStyle = UIModalPresentationCustom;
id<UIViewControllerTransitioningDelegate> transitionDelegate = [self transitionDelegate];
[self presentViewController:pageVC animated:YES completion:nil];

您的动画过渡对象将负责确保您的页面视图控制器框架不是全屏。请注意同时在屏幕上管理两个复杂视图控制器的影响。我建议您拍摄第一个视图控制器视图的快照,然后将其作为第二个视图控制器视图的背景。页面视图控制器将成为第二个控制器的子级。

您可能会发现本教程很有用 - http://www.teehanlax.com/blog/custom-uiviewcontroller-transitions/

更好的是,有人尝试在 github 上复制 Session 218 的示例 - https://github.com/soleares/SOLPresentingFun

快乐编码

其他提示

听起来您想使用 UIViewController 容器进行自定义转换。这是一个比典型转换更棘手的命题,因为您需要提供实现的对象 UIViewControllerContextTransitioning 你自己。

尽管有所有必需的方法,但该协议实施起来并不困难。大多数方法都是不言而喻的。由于您想要交互式过渡,因此您将面临一些我尚未遇到的障碍。以下是我最近在实现该协议时发现的一些技巧:

  1. 不要害怕定义自己的密钥: viewControllerForKey:. 。我发现我需要在动画对象中引用父视图控制器。最干净的解决方案是定义另一个键来传递到此方法中。如果实现此协议的对象也是父视图控制器,则此方法非常有效。

  2. 通过致电出售您的动画师 animationControllerForPresentedController:presentingController:sourceController 而不是自己实例化你的动画师。再次,这感觉像是一种更干净的方法,因为它在协议的意图范围内运行。否则该方法将作为 presentViewController:animated:completion:.

  3. 使用 UIModalPresentationNone. 。由于您专门讨论子视图控制器,因此您并没有真正进行模式演示。

  4. 添加视图控制器包含调用,例如 addChildViewController: 在你的动画师中。您将在此处将新视图控制器添加到视图控制器层次结构中。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top