有没有可能使用iOS 7的UIViewController转换(具体交互)与子视图控制器?
有很多关于使用新的iOS 7 UIViewController转换API和伟大的新的交互式转换API的教程。 然而,尽pipe在自定义UIViewController的WWDC 2013video中,这些似乎都没有引用添加和删除子视图控制器。苹果员工显示了我所想象的是一个用自定义转换呈现的子视图控制器:
(我假设这是一个视图控制器显示在另一个顶部看起来,我不认为你可以过渡到一个新的UIViewController,同时保持其他可见的后面…)
有没有可能通过子视图控制器来实现这样的事情?
在我的具体情况,我添加一个UIPageViewController
图像库作为子视图控制器,但你仍然可以看到它被添加到视图控制器,如果图像UIPageViewController
不占用全屏幕。 我还添加了将图像从屏幕上滑出的function(类似于iOS 7多任务closures),我很乐意将其作为交互式视图控制器popup窗口。
有没有任何教程这样的事情? 这甚至有可能吗? 这会更好地完成presentViewController
不知何故,这将允许我查看下面的视图控制器?
如果您再次观看video,您将在12:15注意到他引用了支持的演示风格UIModalPresentationCustom
。 此演示文稿样式意味着“从”View Controller的视图不会从视图层次结构中删除,从而允许您创build自己的表单。 所以在你的情况下,你会做到以下几点:
//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];
您的animation转换对象将负责确保您的页面视图控制器框架不是全屏。 只要小心同时在屏幕上pipe理两个复杂的视图控制器的含义。 我build议宁可拍摄第一个视图控制器视图的快照,然后将其作为第二个视图控制器视图的背景。 页面视图控制器然后将是第二个控制器的孩子。
你可能会发现这个教程很有用 – http://www.teehanlax.com/blog/custom-uiviewcontroller-transitions/
更好的是,有人在github上复制Session 218的示例 – https://github.com/soleares/SOLPresentingFun
快乐的编码
这听起来像你想用UIViewController容器做一个自定义的转换。 这比典型的转换更有趣,因为你需要提供自己实现UIViewControllerContextTransitioning
的对象。
尽pipe所有必需的方法,这个协议并不难实现。 大多数方法是不言而喻的。 既然你想要一个互动过渡,你将面临一些我还没有面对的障碍。 以下是我最近在实现此协议时发现的一些提示:
-
不要害怕定义你自己的键:
viewControllerForKey:
我发现我需要在我的animation师对象的父视图控制器的引用。 最干净的解决scheme是定义另一个关键要通过这种方法。 如果实现此协议的对象也是父视图控制器,则此方法非常有效。 -
通过调用
animationControllerForPresentedController:presentingController:sourceController
而不是自己实例化animation制作animationControllerForPresentedController:presentingController:sourceController
来制作animation。 再一次,这感觉就像一个更清洁的方法,因为它是在协议的意图内运作的。 这是另外被称为presentViewController:animated:completion:
一部分的presentViewController:animated:completion:
-
使用
UIModalPresentationNone
。 既然你正在专门讨论子视图控制器,那么你并不是在做一个模态表示。 -
添加视图控制器遏制调用,例如
addChildViewController:
在您的animation师。 这是您将新视图控制器添加到视图控制器层次结构的位置。