【问题标题】:Is it possible to use iOS 7 UIViewController transitions (interactive specifically) with child view controllers?是否可以将 iOS 7 UIViewController 转换(特别是交互式)与子视图控制器一起使用?
【发布时间】:2014-03-27 01:44:00
【问题描述】:

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

(我假设这是一个视图控制器似乎显示在另一个视图控制器之上。我认为您不能转换到一个新的 UIViewController 同时保持另一个可见...)

有没有可能用子视图控制器来实现这样的事情?

在我的具体情况下,我添加了一个 UIPageViewController 图像库作为子视图控制器,但如果 UIPageViewController 的图像没有占据全屏,您仍然可以看到它添加到的视图控制器.我还添加了将图像滑出屏幕的功能(类似于 iOS 7 多任务关闭),我希望它成为一个交互式视图控制器弹出窗口。

有这样的教程吗?甚至可能吗?使用presentViewController 以某种方式让我可以查看下面的视图控制器会更好吗?

【问题讨论】:

  • 嗨,阿罗哈,如果有人回答了您的问题,请给他们投票或开始对话,而不是不理会这个问题。谢谢

标签: ios objective-c cocoa-touch ios7 uiviewcontroller


【解决方案1】:

如果您再次观看该视频,您会在 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

快乐编码

【讨论】:

    【解决方案2】:

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

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

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

    2. 通过调用animationControllerForPresentedController:presentingController:sourceController 出售您的动画师,而不是自己实例化您的动画师。再一次,这感觉像是一种更清洁的方法,因为它在协议的意图内运行。这是否则将作为presentViewController:animated:completion: 的一部分调用的方法。

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

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

    【讨论】:

      猜你喜欢
      • 2018-04-18
      • 1970-01-01
      • 2014-08-20
      • 1970-01-01
      • 2015-06-06
      • 2011-05-18
      • 2011-12-30
      • 1970-01-01
      • 2015-09-20
      相关资源
      最近更新 更多