自定义交互式演示转换
Posted
技术标签:
【中文标题】自定义交互式演示转换【英文标题】:Custom Interactive Presentation Transition 【发布时间】:2015-07-18 21:34:28 【问题描述】:我正在尝试创建一个自定义视图控制器容器,它将在屏幕底部显示一个抽屉,例如 Apple 邮件或音乐应用程序,我希望用户能够点击它来转换它以全屏显示,或以交互方式向上滑动以显示内容。
我有抽屉工作,使用UIPanGestureRecognizer
滑动它。
我可以通过将内容控制器添加为子控制器、将内容视图添加到层次结构并在适当时调用viewWillAppear:
和viewDidAppear:
来实现这一点。
但我希望允许内容视图控制器在滑动旁边设置动画(例如,viewWillAppear:
中的任何动画,如交互式弹出),因此我正在查看自定义模式演示和 UIPercentDrivenInteractiveTransition
,但我遇到了墙,我不明白为什么会这样。我已经设置了一个过渡委托,返回一个自定义动画控制器和一个交互控制器,它是一个 UIPercentDrivenInteractiveTransition
对象。
我的抽屉是容器控制器视图层次结构的一部分,自然我希望内容控制器的视图成为抽屉的子视图。但是当调用presentViewController:animated:completion:
时,一个新的UITransitionView
subview 会被添加到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
控制动画的完成 - 正是这里需要的。
【讨论】:
以上是关于自定义交互式演示转换的主要内容,如果未能解决你的问题,请参考以下文章