Y—Snackbar
一个易于使用的 UI 组件,用于向用户显示简短、瞬时的消息。

此框架允许您向应用程序添加瞬时的应用内消息。多个消息将使用流畅的动画堆叠。消息可以完全自定义主题,并且可以设置为在指定的时间间隔后过期,或保持在屏幕上直到被关闭。

Snackbar demo animation

许可

Y—Snackbar 在 Apache 2.0 许可下获得许可。

文档

文档自动从源代码注释生成,并呈现为托管在 GitHub Pages 上的静态网站:https://yml-org.github.io/ysnackbar-ios/

用法

Snack (小吃)

Snack 是一个模型,表示要呈现给用户的浮动临时警报或消息。它包含以下内容:

如果两个 Snack 的 reuseIdentifier 相等,或者两个 Snack 的 titlemessage 相等,则认为它们相等。这得益于 Snack 符合 EquatableHashable 协议。

💡 如果 Snack 的 duration.nan.zero,则 Snack 将永远存在(直到您滑动以将其关闭)。

SnackView (小吃视图)

SnackView 是一个视图,将通过 SnackbarManager 呈现给用户。视图的内容使用 Snack 模型对象填充。它有一个初始化程序:

客户端可以通过设置 appearance 在创建 Snack 时修改或设置 SnackView 的外观。 这将允许客户端修改以下属性:

如何从 Snack 获取 SnackView

func getSnackAssociatedView() -> SnackUpdatable

SnackUpdatable (小吃可更新)

SnackbarManager (小吃栏管理器)

所有小吃都由 SnackbarManager 管理。

状态

操作

客户端可以通过设置类型为 SnackbarManager.Appearanceappearance 属性来控制或修改 SnackbarManager 的动画持续时间、间距等。 这将允许客户端修改以下属性:

默认功能

每个添加的 Snack 都具有以下默认功能:

用法

  1. 导入框架

    import YSnackbar
  2. 创建 Snack

    func makeSnack() -> Snack {
        Snack(
            alignment: .bottom,
            title: "Network Reachable",
            message: "You are currently online.",
            reuseIdentifier: "yml.co",
            icon: UIImage(named: "wifi"),
            duration: 8.0
          )
    }
  3. 添加 Snack

    // Creates a snack using `SnackbarManager.defaultAlignment = .top` 
    let snack = Snack(message: "No network")
    
    // Adds to the top of the screen
    SnackbarManager.add(snack: snack) 
    // Creates a snack with bottom alignment
    let snack = Snack(alignment: .bottom, message: "Copied to clipboard")
    
    // Adds to the bottom of the screen
    SnackbarManager.add(snack: snack) 
    // Set `SnackbarManager.defaultAlignment` to bottom
    SnackbarManager.defaultAlignment = .bottom
    
    // Creates a snack using defaultAlignment.
    let snack = Snack(message: "Copied to clipboard")
    
    // Adds to the bottom of the screen
    SnackbarManager.add(snack: snack) 
  4. 移除 Snack

    let snack = Snack() 
    SnackbarManager.remove(snack)
  5. 创建自定义 Snack

    final class ImageSnack: Snack {
        convenience init(named: String) {
            self.init(message: named, reuseIdentifier: "co.yml.page")
        }
    
        override func getSnackAssociatedView() -> SnackUpdatable {
            SnackImageView(snack: self)
        }
    }
    
    final class SnackImageView: UIImageView {
        private(set) var snack: Snack
    
        required init(snack: Snack) {
            self.snack = snack
            super.init(image: UIImage(named: snack.message))
            setUp()
        }
    
        required init?(coder: NSCoder) { nil }
    
        private func setUp() {
            self.contentMode = .scaleAspectFit
        }
    }
    
    extension SnackImageView: SnackUpdatable {
        func update(_ snack: Snack) {
            self.image = UIImage(named: snack.message)
            self.snack = snack
        }
    }

依赖项

Y—Snackbar 依赖于我们的 Y—CoreUIY—MatterType 框架(两者也都是开源的,并采用 Apache 2.0 许可)。

安装

您可以通过将其添加为包依赖项来将 Y—Snackbar 添加到 Xcode 项目。

  1. 文件菜单中,选择添加包...
  2. 在包存储库 URL 文本字段中输入“https://github.com/yml-org/ysnackbar-ios”。
  3. 单击添加包

贡献 Y—Snackbar

要求

SwiftLint(linter)

brew install swiftlint

Jazzy(文档)

sudo gem install jazzy

设置

克隆 repo 并在 Xcode 中打开 Package.swift

版本控制策略

我们使用 语义版本控制

{major}.{minor}.{patch}

例如

1.0.5

分支策略

我们为我们的框架采用简化的分支策略。

分支命名约定

feature/{ticket-number}-{short-description}
bugfix/{ticket-number}-{short-description}

例如

feature/CM-44-button
bugfix/CM-236-textview-color

拉取请求

在提交拉取请求之前,您应该:

  1. 编译并确保没有警告和错误。
  2. 运行所有单元测试并确认一切通过。
  3. 检查单元测试覆盖率并确认所有新的/修改的代码都已完全覆盖。
  4. 从命令行运行 swiftlint 并确认没有违规。
  5. 从命令行运行 jazzy 并确认您有 100% 的文档覆盖率。
  6. 考虑使用 git rebase -i HEAD~{commit-count} 将你最后的 {commit-count} 个提交合并为功能块。
  7. 如果父分支(通常是 main)的 HEAD 自你创建分支以来已更新,请使用 git rebase main 来 rebase 你的分支。
    • 永远不要将父分支合并到你的分支中。
    • 始终将你的分支从父分支 rebase。

当提交拉取请求时:

当合并拉取请求时:

发布新版本

生成文档(通过 Jazzy)

您可以使用 Terminal 中的以下命令直接从源代码生成自己的本地文档集。

jazzy

这将在 /docs 下生成一组文档。 默认配置在默认配置文件 .jazzy.yaml 文件中设置。

要查看其他文档选项,请键入:

jazzy --help

每次将提交推送到 main 时,GitHub Action 会自动运行,该 Action 运行 Jazzy 以生成我们的 GitHub 页面文档,网址为:https://yml-org.github.io/ysnackbar-ios/