自定义互动演示文稿转换

时间:2015-07-18 21:34:29

标签: ios uikit presentviewcontroller uimodalpresentationcustom

我正在尝试创建一个自定义视图控制器容器,它将在屏幕底部显示一个抽屉,如Apple邮件或音乐应用程序,我希望用户能够点击它来转换它全屏,或以交互方式向上滑动以显示内容。

enter image description here

我让抽屉工作,使用UIPanGestureRecognizer滑动它。 我可以通过将内容控制器添加为子控制器,将内容视图添加到层​​次结构并在适当时调用viewWillAppear:viewDidAppear:来实现此目的。

但是我希望允许内容视图控制器在滑动旁边进行动画处理(例如viewWillAppear:中的任何动画,就像交互式弹出一样),因此我正在查看自定义模式演示和UIPercentDrivenInteractiveTransition,但是我正在撞墙,我不明白为什么会发生这种情况。我已经设置了一个转换委托,返回一个自定义动画控制器和一个UIPercentDrivenInteractiveTransition对象的交互控制器。

我的抽屉是容器控制器视图层次结构的一部分,当然我希望内容控制器的视图是抽屉的子视图。但是在调用presentViewController:animated:completion:时,会向UITransitionView添加一个新的UIWindow子视图,据推测应该是转换动画发生的位置。但这会导致我的UIPanGestureRecognizer被杀,用户无法执行滑动以打开抽屉。

我尝试创建自定义UIPresentationController以及其他方法来控制层次结构中containerView应该在哪里,但我无法更改行为。

我试图以正确的方式做什么?我错过了什么?

如果有人有兴趣,这是我的框架:LNPopupController

2 个答案:

答案 0 :(得分:6)

更新2015.11.19

一个演示项目

Obj-C - > https://github.com/saiday/DraggableViewControllerDemo

Swift 2.x - > https://github.com/ostatnicky/DraggableViewController

Swift 4.x - > https://github.com/satishVekariya/DraggableViewController

感谢@avdyushin提到我的博文。

是的,我的帖子Draggable view controller? Interactive view controller!是一个关于你主题的教程。

引自我的博文:

怎么做

设计理念

一起没有两个UIViewController,而一次只有一个UIViewController。当用户开始拖动某个子视图时,按自定义UIViewControllerAnimatedTransitioning显示另一个包含自定义UIPercentDrivenInteractiveTransition protocol的视图控制器。

技术的东西

这两个协议是自定义交互式UIViewController转换的基础。如果您还不知道,请在开始之前先看一眼 1. UIViewControllerAnimatedTransitioning protocol
2. UIPercentDrivenInteractiveTransition protocol

答案 1 :(得分:4)

iOS 10的更新答案:现在使用UIViewPropertyAnimator微不足道了。

UIViewPropertyAnimator是基于块的动画概念的延续,采用了它的逻辑延续 - 围绕动画的面向对象的包装。这允许更多的控制,例如使用fractionComplete控制动画的完成 - 正是这里所需要的。