🍞 Rye
简介
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?)
}
如您所见,standard
和custom
ViewType都将一个可选的RyeConfiguration
作为参数。这意味着您不需要提供RyeConfiguration
,在这种情况下,将使用所有参数的默认值,包括文本(但您可能不希望显示“添加消息”的消息,对吧?)。
此外,custom
ViewType接受您想要使用的自定义UIView。
请注意,当使用自定义视图时,一些RyeConfiguration
键是不相关的。具体来说,这些是在您决定为消息使用custom
视图时未使用的键
- backgroundColor
- textColor
- textFont
- text
- cornerRadius
有关AnimationType
的更多信息,请参阅下面的动画类型部分。
在哪里显示警告?
确定Rye警告显示位置由Rye.Position
和Rye.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.Position
和Rye.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
创建自己的子类,并使用 .custom
为 viewType
参数
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
方法中调用RyeViewController
的show()
方法,这将显示上述问题。
示例项目
要了解更多信息,请参阅本存储库中包含的 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
。
👥 鸣谢
用
📄 许可证
Rye 可在 MIT 许可证下使用。有关更多信息,请参阅 LICENSE 文件。