Swapper 1.0.0

Swapper 1.0.0

Levi Bostian 维护。



Swapper 1.0.0

  • 作者:
  • Levi Bostian

Build Status Version License Platform Swift 5.0.x

Swapper

在您的应用中快速轻松地在许多不同的 UIView 之间进行切换。

project logo

安卓开发者?请查看 Swapper 的安卓版本!

Swapper 是什么?

你知道那些在应用中你没有行来显示的 UITableView 时刻吗?你知道那些在执行 HTTP 网络请求时,你想要向用户显示非阻塞加载视图的时刻吗?这些都是移动应用的常见场景。Swapper 是一个 UIView,它允许你使用一行代码在一系列其他的 UIView 之间进行切换。

为什么使用 Swapper?

  • Swift API
  • 轻量级。无依赖。
  • UI 测试友好。
  • 使用适用于 95% 的用例的默认值进行设置。对于那些其他情况可以进行自定义。
  • 完整的测试套件。 Build Status
  • 完整的文档.

我建议你查看另外 2 个与 Swapper 很好配合使用的库: EmptyPleaseHold

安装

Swapper 可以通过 CocoaPods 获得。要安装它,只需将以下行添加到您的 Podfile 中

pod 'Swapper', '~> version-here'

version-here 替换为:Version,因为这目前是最新版本。

入门指南

  • 在您的 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文件。