DeckTransition
DeckTransition 是尝试重新创建 iOS 10 中 Apple Music 和 iMessage 应用中发现的类似卡片式过渡效果。
以下是一个展示其效果的动作图。
要求
- Swift 5.0
- iOS 9 或更晚版本
安装
CocoaPods
要使用 CocoaPods 安装 DeckTransition,请在您的 Podfile 中添加以下行:
pod 'DeckTransition', '~> 2.0'
Carthage
要使用Carthage安装DeckTransition,请将以下行添加到您的Cartfile中
github "HarshilShah/DeckTransition" ~> 2.0
文档
您可以在此处找到文档。文档是由Jazzy生成的,托管在GitHub Pages上。
用法
基础
在您的模态视图控制器中设置modalPresentationCapturesStatusBarAppearance
为true
,并覆盖preferredStatusBarStyle
变量以返回.lightContent
。
此外,应跟踪滑动关闭手势的UIScrollView
实例应当将它们的backgroundColor
设置为.clear
。
显示
可以从代码或使用Storyboard调用此过渡效果。
要通过Storyboard使用,请设置自定义 segue(将其kind
设置为custom
),并将class
设置为DeckSegue
。
以下是一个通过代码使用的示例片段。只需用您的视图控制器类替换ModalViewController()
即可。
let modal = ModalViewController()
let transitionDelegate = DeckTransitioningDelegate()
modal.transitioningDelegate = transitionDelegate
modal.modalPresentationStyle = .custom
present(modal, animated: true, completion: nil)
关闭
默认情况下,DeckTransition 具有滑动返回的手势,当你的模态窗口的主 UIScrollView
滚动到顶部时,此功能会被自动启用。
你可以通过在初始化 DeckTransitioningDelegate
时传递 false
以选择退出此行为。
UIScrollView
检测
DeckTransition 内部有一个启发式算法来决定应该跟踪哪个 UIScrollView
以支持滑动返回手势。通常情况下,这足以覆盖大多数使用场景。
然而,还有一些边缘情况,如果在某些情况下遇到这个问题,可以通过使你的模态视图控制器遵守 DeckTransitionViewControllerProtocol
协议来解决。有关此内容的更多信息可以在关于UIScrollView 检测的文档页面找到。
快照
由于各种原因,包括 iOS 11 的安全区域布局,DeckTransition 使用展示视图控制器的视图的快照而不是直接使用视图。此视图会在每次帧大小调整时自动更新。
然而,有些情况下你可能需要亲自更新快照视图,可以使用以下一行代码实现
(presentationController as? DeckSnapshotUpdater)?.requestPresentedViewSnapshotUpdate()
这只是请求展示控制器更新快照。
你也可以选择从展示视图控制器直接更新快照,如下所示
(presentedViewController?.presentationController as? DeckSnapshotUpdater)?.requestPresentedViewSnapshotUpdate()
需要注意的是,更新快照是一个耗时的过程,仅在必要时使用,例如如果您正在更新整个应用程序的主题。
使用 DeckTransition 的应用程序
- Petty by Zach Simone
- Bitbook by Sammy Gutierrez
- What's Open for iOS by Mason SRCT
- Manabi Reader by Alex Ehlke
如果你在使用此库,请随意提交一个 PR
作者
作者:Harshil Shah
许可
DeckTransition遵循MIT许可。有关更多信息,请参阅LICENSE文件。