MRKTransitions
MRKTransitions 是一个 Swift pod,用于简化屏幕间的过渡,同时也提供了一些默认的过渡效果。
Podfile。
将 'MRKTransitions' pod 添加到你的pod 'MRKTransitions'
用法
首先创建自己的过渡,继承自 MRKTransition,我们强烈推荐从 MRKTransitionSpecific 继承,这样您可以指定移动的视图所在的类。
class MyMRKTransition: MRKTransitionSpecific<ViewController1, ViewController2> {
override func specificPush(from: ViewController1, to: ViewController2, context: UIViewControllerContextTransitioning, time: TimeInterval) {
to.view.frame = from.view.bounds
context.containerView.insertSubview(to.view, at: 0)
let transitionOptions: UIView.AnimationOptions = [.transitionFlipFromRight, .showHideTransitionViews]
UIView.transition(from: from.view, to: to.view, duration: time, options: transitionOptions) { completed in
context.completeTransition(completed)
}
}
}
恭喜!畅饮一杯
现在让我们将其投入实际使用,为此我们需要创建一个 Transition 代理并将其包含到导航流程中。只需使用 MRKNavigationTransitionDelegate 并将 Transition 类作为参数传递即可
let transitionDelegate = MRKNavigationTransitionDelegate(MyMRKTransition.self)
此代理可用于 Push/Pop 过渡,以及 Present 视图控制器
//When the ViewController is about to be presented
viewController.transitioningDelegate = presenter.transitionDelegate
但如果您可以自动化这个过程会更好吗?如果是这样,只需将您的 App 导航器从 MRKGenericNavigationController 中扩展并重写 transitionRules 属性!
class NavigationController: MRKGenericNavigationController {
override var transitionRules: [MRKTransitionRule] {
return [ ViewController1.self ~ MyMRKTransition.self ~ ViewController2.self ]
}
}
现在,只需将此 NavigationController 作为您应用程序的根即可,它将负责使用必要的动画!
我希望这个 pod 对您有用,如果您觉得它救了您的命,您可以给我一杯啤酒!