在 iOS 原生应用中,比如返回上一个画面很简单,但如果要过渡到 ViewController 阶层较远的画面,通常需要进行很多繁琐的处理。
还有其他情况,例如:
这次提供的机制是为了更简单地实现这些功能。
要运行示例项目,首先克隆仓库,然后从 Example 目录运行 pod install
Storyboard ID
transition.to("list_news!show(id=9)")
等方法要显示的初始 ViewController 应使用特别指定的 RootTransitionAgent(或其派生类)
RootTransitionAgent.create().forever().start("^/top")
然后在 AppDelegate 中添加如下代码即可显示。
此处用 VC 表示 ViewController
user
, /user
: 使用 NavigationController 的 Push 实现在当前 VC 中将页面切换到 user
VC!user
: 使用 Modal(presentViewController)方式,展现当前的 user
VC..
: 返回上一级 VC../friend
: 从上一层 VC 直接 Push 到 friend
VC^/top
: ^
表示绝对 PATH,将根 VC 添加到 top
VChome#user
: 从 home
VC 深层内部的 user
VC 进行切换/
: 使用 NavigationController 的 Push 进行过渡!
: 显示类似 ModalView 的视图#
: 类似于 Tab 的内部 ViewController/top/news(category=10,offset=50)
的参数,需要在括号中传递,并且可以通过 agent 的 params 方法进行引用。!/
: 在类似 ModalView 的显示中,包含 NavigationController 的容器TransitionViewController 的实现如下。请通过继承或扩展外部现有类来调用 viewDidShow()
方法。
public class TransitionViewController : UIViewController {
override public func viewDidAppear(animated: Bool) {
viewDidShow()
super.viewDidAppear(animated)
}
}
TransitionTabBarController 的实现如下。请通过继承或扩展等方式实现。
public class TransitionTabBarController : UITabBarController {
override public func viewDidAppear(animated: Bool) {
setupAgentToInnerNameController()
super.viewDidAppear(animated)
viewDidShow()
if (viewControllers?.count ?? 0) > selectedIndex {
viewControllers?[selectedIndex].viewDidShow()
}
}
}
将过渡事件通知给 NSNotificationCenter。
Storyboard ID
识别。此类行为可以通过实现后续提到的 decideViewController
方法进行更改。transition.to("/top/list_news")
等操作。当在 UITabBarController 中处理多个 ViewController 时,请在 Framework 侧不生成 VC,而由 UITabBarController 等进行(这应该是正常操作)。通过定义 controllerName:String
这类属性,以便 Framework 侧可以找到(Storyboard ID 无法查找)。
请参阅 Example 的 ProfileViewController.swift 等。
UITabBarController 内的 UINavigationController 似乎不会调用其管理下的 VC 的 viewDidAppear 等方法。
例如,FriendListViewController.swift
实现 UINavigationControllerDelegate 并执行如下操作:
func navigationController(navigationController: UINavigationController, didShowViewController viewController: UIViewController, animated: Bool) {
viewController.viewDidAppear(animated)
}
进行调用。
要自定义过渡行为时,请实现以下操作。
在实现独特的 TransitionViewControllerProtocol 时,请注意以下事项。请参考 TransitionViewController 和 TransitionDefaultHandler 的实现。
Ken Morishita, [email protected]
DeepTransition遵循MIT许可。有关更多信息,请参阅LICENSE文件。