Swapper
在您的应用中快速轻松地在许多不同的 UIView 之间进行切换。
安卓开发者?请查看 Swapper 的安卓版本!
Swapper 是什么?
你知道那些在应用中你没有行来显示的 UITableView
时刻吗?你知道那些在执行 HTTP 网络请求时,你想要向用户显示非阻塞加载视图的时刻吗?这些都是移动应用的常见场景。Swapper 是一个 UIView
,它允许你使用一行代码在一系列其他的 UIView
之间进行切换。
为什么使用 Swapper?
- Swift API
- 轻量级。无依赖。
- UI 测试友好。
- 使用适用于 95% 的用例的默认值进行设置。对于那些其他情况可以进行自定义。
- 完整的测试套件。
- 完整的文档.
我建议你查看另外 2 个与 Swapper 很好配合使用的库: Empty 和 PleaseHold。
安装
Swapper 可以通过 CocoaPods 获得。要安装它,只需将以下行添加到您的 Podfile 中
pod 'Swapper', '~> version-here'
将 version-here
替换为:,因为这目前是最新版本。
入门指南
- 在您的
UIViewController
中创建一个SwapperView
实例。您可以通过 Storyboard 执行此操作,在 Storyboard 中添加一个UIView
并将其类设置为SwapperView
,或者在 Swift 代码中创建实例
let swapperView: SwapperView<ViewControllerSwapViews> = {
let view = SwapperView<ViewControllerSwapViews>()
view.translatesAutoresizingMaskIntoConstraints = false
view.backgroundColor = .white
return view
}()
- 确保创建您希望交换的
UIView
。在这个例子中,让我们假设我创建了一个UITableView
和一个UIImageView
,我想要在这些之间进行交换。
在您的 UIViewController
中,将您的 UIView
添加到您的 SwapperView
import Swapper
// It's recommended to use emum for the identifier. It will prevent bugs by not worrying about typos.
// However, you can just as easily use `SwapperView<String>` or something similar.
enum ViewControllerSwapViews: String, CustomStringConvertible {
case imageView
case tableView
var description: String {
return rawValue
}
}
class ViewController: UIViewController {
let swapperView = SwapperView<ViewControllerSwapViews>()
override func viewDidLoad() {
super.viewDidLoad()
// `setSwappingViews` will remove all subviews from the SwapperView. Reset it.
swapperView.setSwappingViews([
(.imageView, myImageView),
(.tableView, myTableView)
], swapTo: .imageView) // `swapTo` is optional and is used to swap to one of the views after setting new swapping views.
}
}
注意: Swapper 将使用 setSwappingViews()
给定的 UIView
实例作为弱引用。请保留自己的强引用以确保应用程序正常运行。
注意: Swapper 将更新您设置的交换视图的自动布局约束。Swapper 将设置大小与您为 SwapperView
设置的大小相同。因此,无需自己设置自动布局约束!如果您不使用 AutoLayout,则编辑 SwapperView
的配置,以禁用更新约束:SwapperView.defaultConfig.updateAutoLayoutConstraints = false
。
- 最后,您只需要告诉 Swapper 交换即可!
try! swapperView.swapTo(.tableView)
现在 Swapper 将为您显示 UITableView
。Swapper甚至会为您渐出 UIImageView
和渐入 UITable
为您提供一个良好的体验
SwapperView.defaultConfig.swapToAnimateOldView = { oldView in
// Run `UIView.animate()` function here on `oldView` to animate it out.
}
SwapperView.defaultConfig.swapToAnimateNewView = { newView in
// Run `UIView.animate()` function here on `newView` to animate it in.
}
注意: .swapTo()
如果传入的 ID 没有在 .setSwappingViews()
中给出,则会抛出错误。或者,您传入的视图已被垃圾回收。Swapper 仅对给出的 UIView
保持弱引用。
配置 Swapper
Swapper 在无需任何配置的情况下运行效果很好。但是,如果您希望自行定制它,您也可以这样做。
如果您想更改应用程序中所有SwapperView
实例的默认值,请更改默认单例中的值。
SwapperView.defaultConfig.transitionAnimationDuration = 0.8
或者,您可以配置一个SwapperView
的单个实例。
let swapperView = SwapperView()
var instanceConfig: SwapperViewConfig {
let config = SwapperViewConfig()
config.backgroundColor = instanceConfigBackgroundColor
return config
}
swapperView.config = instanceConfig
有关所有配置选项的列表,请查看SwapperViewConfig
的相关文档:SwapperViewConfig文档链接
使用Swapper进行测试
如果您想在应用程序中编写测试并包含Swapper,强烈建议禁用动画。
UIView.setAnimationsEnabled(false)
好了!Swapper继承了这个属性,并将根据此设置启用或禁用动画。
示例
Swapper附带了一个示例应用程序,您可以使用它来试用库。要运行示例项目,首先克隆仓库,然后从Example目录运行pod install
。然后,在XCode中打开工作区。
开发
Swapper是一个相对简单的CocoaPods库项目。按照以下说明进行操作,将获得最佳开发体验。
- 安装cocoapods/gems并设置工作区
$> bundle install
$> cd Swapper/Example
$> pod install
$> brew install swiftformat
$> brew install swiftlint
- 设置git hooks,以便在git中使用时为您执行一些工作。
$> brew install pre-commit
$> ./hooks/autohook.sh install
git钩子脚本安装在地hooks/
。如果您愿意,可以查看它们。
✨
贡献者感谢这些出色的人的贡献(表情符号键)
贡献
Swapper欢迎拉取请求。查看我计划要工作的问题列表。如果您愿意以这种方式做出贡献,请查看。
希望为Swapper添加功能? 在您决定花费大量时间向库中添加功能之前,请先,创建一个问题,说明您想添加什么。这可能为您节省时间,因为如果您的目的不适合Swapper的使用案例,您可能会节省时间。
许可证
Swapper在MIT许可证下可用。有关更多信息,请参阅LICENSE文件。