TransitionRouter
帮助您快速轻松地创建控制器之间的自定义转场效果。交互式原型可在此处获得:链接。
如何使用 TransitionRouter
? 简单如 ABC! 您需要创建一个具有某种转场类型的路由,例如:
let topRouter = TransitionRouter(type: .top)
您也可以创建自己的自定义转场。只需创建一个符合 TransitionAnimator
协议的对象,并使用您的对象创建一个路由。
let fadeRouter = TransitionRouter(type: .custom(animator: FadeTransitionAnimator()))
当您需要启动任何自定义转场时,将该路由设置为您想要展示的控制器的 transitioningDelegate
。
let vc = SecondViewController()
vc.transitioningDelegate = selectedRouter
present(vc, animated: true)
当然,您可以自定义默认转场的选项:
UIViewAnimationOptions
动画选项可以通过 options
属性进行更改。
要创建交互式转场,您需要使用 interactive
参数创建一个路由。
let leftInteractiveRouter = TransitionRouter(type: .left, interactive: true)
或者直接通过属性设置:
leftInteractiveRouter.interactive = true
当然,您可以控制转场的进度。创建 UIPanGestureRecognizer
或其子类并设置路由。
let leftRecognizer = UIScreenEdgePanGestureRecognizer()
leftRecognizer.edges = .left
leftInteractiveRouter
.add(leftRecognizer)
.transition { [unowned self] router in
let vc = ColorViewController(color: .green)
vc.transitioningDelegate = router
self.present(vc, animated: true)
}
view.addGestureRecognizer(leftRecognizer)
您可以手动更新转场的进度:
leftInteractiveRouter.update { recognizer -> CGFloat in
let translation = recognizer.translation(in: recognizer.view!)
return translation.x / recognizer.view!.bounds.width * 0.5
}
请注意 - 对于您的自定义动画器,您必须手动设置更新逻辑。
要运行示例项目,请克隆存储库,并首先从 Example 目录运行 pod install
。
github "artemnovichkov/TransitionRouter"
pod "TransitionRouter"
File > New > Project
在根目录中创建一个 Package.swift
。
import PackageDescription
let package = Package(
name: "NameOfYourPackage",
dependencies: [
.Package(url: "https://github.com/artemnovichkov/TransitionRouter", majorVersion: 0, minor: 1)
]
)
运行 swift package fetch
打开 Xcode 项目文件。File > New > Target > Cocoa Touch Framework 如果您不需要 Obj-C 支持,请删除导航器中的 .h 文件。
在 Finder 中,将源文件从 Packages/TransitionRouter/Sources
拖放到您的项目中,并将其添加到 TransitionRouter 目标。
将您的项目链接到 TransitionRouter 依赖项。选择您的主要目标,并将 CocoaTouchFramework 添加到 General 选项卡中的 Linked Frameworks and Libraries。
将 Sources 文件夹拖到您的项目中。 下载
Artem Novichkov, novichkoff93@gmail.com
TransitionRouter 基于 MIT 许可发布。 更多信息请查看 LICENSE 文件。