定制交互式演示过渡

11

我正在尝试创建一个自定义视图控制器容器,它将在屏幕底部显示抽屉,类似于Apple邮件或音乐应用程序,并且我希望用户能够点击它以过渡到全屏,或者上滑与之交互以显示内容。

enter image description here

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

但是我希望允许内容视图控制器与滑动一起动画(例如在viewWillAppear:中的任何动画,就像与交互弹出窗口一样),因此我正在查看自定义模态演示和UIPercentDrivenInteractiveTransition,但我遇到了困难,我看不到为什么会发生这种情况。 我设置了转换委托,返回自定义动画控制器和一个交互控制器,该交互控制器是一个UIPercentDrivenInteractiveTransition对象。

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

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

我正在尝试做的事情是正确的吗? 我错过了什么吗?


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


1
这里有一个很好的教程:http://imnotyourson.com/draggable-view-controller-interactive-view-controller/ - avdyushin
2个回答

7

一个演示项目

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


5

针对iOS 10的更新答案:现在使用UIViewPropertyAnimator非常简单。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接