自定义交互式演示转换

Posted

技术标签:

【中文标题】自定义交互式演示转换【英文标题】:Custom Interactive Presentation Transition 【发布时间】:2015-07-18 21:34:28 【问题描述】:

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

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

但我希望允许内容视图控制器在滑动旁边设置动画(例如,viewWillAppear: 中的任何动画,如交互式弹出),因此我正在查看自定义模式演示和 UIPercentDrivenInteractiveTransition,但我遇到了墙,我不明白为什么会这样。我已经设置了一个过渡委托,返回一个自定义动画控制器和一个交互控制器,它是一个 UIPercentDrivenInteractiveTransition 对象。

我的抽屉是容器控制器视图层次结构的一部分,自然我希望内容控制器的视图成为抽屉的子视图。但是当调用presentViewController:animated:completion: 时,一个新的UITransitionViewsubview 会被添加到UIWindow 中,据说是在应该发生过渡动画的位置。但这会杀死我的UIPanGestureRecognizer,并且用户无法执行滑动以打开抽屉。

我尝试创建自定义 UIPresentationController 和其他方法来控制 containerView 在层次结构中的位置,但我无法更改行为。

我正在尝试以正确的方式做事吗?我错过了什么?


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

【问题讨论】:

这里有很好的教程:imnotyourson.com/… 【参考方案1】: 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。当用户开始拖动某个子视图时,通过自定义UIPercentDrivenInteractiveTransition protocol 呈现另一个带有自定义UIViewControllerAnimatedTransitioning 的视图控制器。

技术的东西

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

【讨论】:

【参考方案2】:

ios 10 的更新答案:现在使用 UIViewPropertyAnimator 很简单。

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

【讨论】:

以上是关于自定义交互式演示转换的主要内容,如果未能解决你的问题,请参考以下文章

iOS 7 自定义转换故障

自定义缩放过渡不适用于模态演示

如何让 UIKit 为我提供自定义转换的转换协调器?

自定义模态转换关闭动画运行不同步

自定义 VC 转换未正确关闭

自定义交互过渡动画