Rye 3.1.0

Rye 3.1.0

Nodes Agency维护。



Rye 3.1.0

  • Nodes Agency - iOS

🍞Rye

Swift Package Manager Carthage Compatible CocoaPods Compatible Platforms GitHub license

简介

Rye允许您向用户呈现不侵入式的警报。

您可以选择显示默认的Rye警报类型,或者完全自定义并显示您自己的UIView

示例

带图片的自定义Rye警报 带按钮的自定义Rye警报 默认Rye警报

📝要求

iOS 11.4
Swift 5

📦安装

Swift包管理器

复制此存储库URL,并将其添加到Package Dependencies中

https://github.com/nodes-ios/Rye.git

Carthage

github "nodes-ios/Rye"

CocoaPods

pod 'Rye'

💻使用方法

原则

要显示一个Rye警报,您需要声明一个新的RyeViewController,然后调用

  • show():显示警报
  • dismiss():取消警报

注意: 根据您选择的dismissMode,您可能不需要自己取消警报,有关详细信息,请参阅下面的displayModes部分。

至少需要考虑以下方面:

  • 显示什么文本
  • 显示标准警报还是带来您自己的自定义视图
  • 在哪里显示警报(顶部底部

显示文本

要使用Rye警报显示文本,您需要创建一个RyeConfiguration。这是一个字典,允许您配置Rye警报的各种UI相关方面。有关可用密钥的详细信息,请参阅可能的Rye配置值部分。

您可以向RyeConfiguration添加的一个值是显示在警报中的文本。

let ryeConfiguration: RyeConfiguration = [ Rye.Configuration.Key.text: "Message for the user" ]

警报类型

您可以使用默认的Rye警报或创建自己的UIView并替换使用。要决定使用哪个,您使用如下的Rye.ViewType枚举

public enum ViewType {
    case standard(configuration: RyeConfiguration?)
    case custom(UIView, configuration: RyeConfiguration?)
}

如您所见,standardcustom ViewType都将一个可选的RyeConfiguration作为参数。这意味着您不需要提供RyeConfiguration,在这种情况下,将使用所有参数的默认值,包括文本(但您可能不希望显示“添加消息”的消息,对吧?)。

此外,custom ViewType接受您想要使用的自定义UIView。

请注意,当使用自定义视图时,一些RyeConfiguration键是不相关的。具体来说,这些是在您决定为消息使用custom视图时未使用的键

  • backgroundColor
  • textColor
  • textFont
  • text
  • cornerRadius

有关AnimationType的更多信息,请参阅下面的动画类型部分。

在哪里显示警告?

确定Rye警告显示位置由Rye.PositionRye.Alignment枚举决定,定义如下

public enum Position {
    case top(inset: CGFloat)
    case bottom(inset: CGFloat)
}
public enum Alignment {
    case leading(inset: CGFloat)
    case center
    case trailing(inset: CGFloat)
}

如果初始化时不指定对齐方式,则默认为.center对齐。

有关Rye.PositionRye.Alignment的更多信息,请参阅下文的位置 & 对齐部分。

显示默认的Rye

遵循这些原则,我们现在可以显示第一个Rye警告。

import Rye
...
let ryeConfiguration: RyeConfiguration = [Rye.Configuration.Key.text: "Message for the user"]
let rye = RyeViewController(
   viewType: .standard(configuration: ryeConfiguration),
   at: .bottom(inset: 16)
)
rye.show()

这将导致一个Rye警告在屏幕底部显示文本“用户信息”,然后2.5秒后自动消失。

控制消失方式

如果您希望Rye警告以不同的方式消失,可以在创建RyeViewController时传递一个dismissMode参数。

import Rye
...
let ryeConfiguration: RyeConfiguration = [Rye.Configuration.Key.text: "Message for the user"]
let rye = RyeViewController(
   dismissMode: .gesture,
   viewType: .standard(configuration: ryeConfiguration),
   at: .bottom(inset: 16)
)
rye.show()

警告现在将停留在屏幕上,直到用户点击或滑动它。

使用自定义配置显示默认Rye

如果您想对警告视图有更多的控制,可以像下面这样在RyeConfiguration字典中添加键和值。

import Rye
...
let ryeConfiguration: RyeConfiguration = [
    Rye.Configuration.Key.text: "Error message for the user",
    Rye.Configuration.Key.backgroundColor: UIColor.red.withAlphaComponent(0.4),
    Rye.Configuration.Key.animationType: Rye.AnimationType.fadeInOut
]

let rye = RyeViewController(
   viewType: .standard(configuration: ryeConfiguration),
   at: .bottom(inset: 16)
)
rye.show()

使用自定义UIView显示Rye

要获得更多的控制,您可以为 UIView 创建自己的子类,并使用 .customviewType 参数

import Rye
...

let customView = YourCustomView()
let rye = RyeViewController(viewType: .custom(customView))

rye.show()

关闭完成

如果您想在 Rye 提示框关闭时执行代码,可以在调用 show 时传递 dismissCompletion 代码块,如下所示

import Rye
...
let ryeConfiguration: RyeConfiguration = [Rye.Configuration.Key.text: "Message for the user"]
let rye = RyeViewController(
   viewType: .standard(configuration: ryeConfiguration),
   at: .bottom(inset: 16)
)

rye.show(withDismissCompletion: {
    print("Goodbye from Rye, time to dy..die")  
})

手动关闭 Rye 提示框

如果您已选择将 Rye 提示框显示为 .nonDismissable,则必须自己关闭它。保留对 RyeViewController 的引用,并在准备放手时调用 dismiss

import Rye
...
var rye: RyeViewController?

let ryeConfiguration: RyeConfiguration = [Rye.Configuration.Key.text: "Message for the user"]
rye = RyeViewController(
   dismissMode: .nonDismissable,
   viewType: .standard(configuration: ryeConfiguration),
   at: .bottom(inset: 16)
)

rye?.show()

...at a later point in time
rye?.dismiss()

参数说明

下面您可以找到用于控制 Rye 提示框的各种参数的说明。

显示模式

Rye 支持三种不同的 displayMode 值,可以在创建新的 RyeViewController 时传递。

  • 自动:提示框在指定的时间间隔后自动出现和消失。
  • 手势:要关闭提示框,您可以轻按或滑动它。
  • nonDismissable:提示框将永久显示在屏幕上,直到通过在您的 RyeViewController 实例上调用 dismiss() 来关闭。

如果在创建新的 RyeViewController 时不传递此值,则默认使用 自动 值,默认间隔为 2.5 秒(默认间隔在 Rye.defaultDismissInterval 中定义)。

位置和居中

您可以指定黑麦警报是显示在屏幕顶部还是底部。这通过在初始化时设置的position参数来指定。该position参数包含一个相关值,它允许您定义一个内边距。

默认情况下,黑麦将为您计算安全区域内边距,因此请确保仅指定所需的额外内边距。

同样,您可以通过aligned参数设置黑麦的对齐方式。.leading.trailing对齐方式也包含一个相关值,它允许您定义一个内边距。如果初始化时没有指定aligned参数,它将默认为.center

动画类型

黑麦提供两种动画类型

  • slideInOut:从顶部或底部(取决于您选择的哪个Position)滑动视图进入。当取消显示时,视图将以相同的方向滑动出去。
  • fadeInOut:当取消显示时,再次以淡入淡出效果显示视图。

要控制动画的持续时间,请使用RyeConfiguration中的animationDuration密钥并提供一个TimeInterval值。

如果您未提供animationDuration的值,则将使用默认值0.3秒。

忽略安全区域

在确定显示黑麦消息的位置时,您可以选择是否在计算中使用safeLayoutArea内边距。

这通过在RyeConfiguration中设置.ignoreSafeAreas值来完成。

默认值是false,意味着将在计算中使用安全区域内边距。

可能的黑麦配置值

以下键可以用于配置字典

.backgroundColor (must be a UIColor)
.textColor (must be a UIColor)
.textFont (must be a UIFont)
.text (must be a String)
.cornerRadius (must be a CGFloat)
.animationType (must be a Rye.AnimationType)
.animationDuration (must be a TimeInterval)
.ignoreSafeAreas (must be a bool)

如果配置设置为nil,则将使用默认配置。任何设置的选项都将覆盖默认状态。

⚠️注意事项

为了显示黑麦消息,需要一个parentView来确定黑麦消息的位置。

如果您在获取parentView之前尝试显示黑麦消息,您将在您的IDE控制台中看到这条警告信息。

找不到父视图以显示黑麦消息。您是否在视图生命周期尚未准备好显示视图之前尝试显示黑麦消息?

如果您在视图的viewDidLoad方法中调用RyeViewControllershow()方法,这将显示上述问题。

示例项目

要了解更多信息,请参阅本存储库中包含的 RyeExample 项目。

⬆️从 v1.x.x 升级到 v2.0.0

在 Rye 的 2.0.0 版本中,我们更改了显示消息的方式。

现在,代码 .toast 和 .snackBar 之间的区别已经消失。相反,现在每个消息都将在视图堆栈的最顶层独立的 UIWindow 中显示,你必须根据之前描述的 displayModes 来决定如何关闭消息。

这也意味着之前的方法: RyeViewController.init(alertType:viewType:at:timeAlive:) 已经被弃用。如果你使用此初始化方法与 2.0.0 版本,则在编译期间将收到弃用警告。

如果你固执地坚持使用,你还可以继续使用现在旧的 init 方法。在幕后,Rye 将为你创建一个新的 RyeViewController,并根据这些规则设置 displayMode

如果 你添加了一个 timeAlive 的值,那么这个 timeAlive 将用于创建一个具有值 .automatic(interval: timeAlive)displayMode

如果没有 添加 timeAlive 的值,displayMode 将是 .nonDismissable

👥鸣谢

❤️Nodes

📄许可证

Rye 可在 MIT 许可证下使用。有关更多信息,请参阅 LICENSE 文件。