终端中使用的 60 多种旋转动画
无耻地抄袭自 sindresorhus/cli-spinners。
.package(url: "https://github.com/kiliankoe/CLISpinner", from: "see latest release")
只想显示一个简单的旋转动画两秒钟?
let s = Spinner(pattern: .dots)
s.start()
sleep(2)
s.stop()
想要一些变化的文本和图案?
let s = Spinner(pattern: .dots, text: "Foobar...", color: .lightCyan)
s.start()
sleep(2)
s.succeed(text: "Barfoo")
// will change the displayed text to '✔ Barfoo'
制作了自己的自定义图案?
let pattern = try Pattern.load(from: "/path/to/your/pattern.json")
let s = spinner(pattern: pattern)
s.start()
sleep(2)
s.stop()
想要来自 sindresorhus/cli-spinners 的所有图案?
let patterns = try Patterns(from: "/path/to/spinners.json")
let s = spinner(pattern: patterns["christmas"]!)
s.start()
sleep(2)
s.stop()
基本上就是这样 👌
Pattern
类型可以使用以下格式从 JSON 文件中读取图案
{
"frames": [
"1",
"2",
"3",
"4",
"5"
],
"speed": 0.08
}
要将多个图案保存在一个文件中
{
"pattern-name1": {
"frames": [
"<(**<)",
"<(**)>",
"(>**)>"
],
"speed": 0.01
},
"pattern-name2": {
"frames": [
"1",
"2",
"3",
"2"
],
"speed": 0.12
}
}
为了看起来美观,旋转动画会在运行时隐藏用户的光标,并在停止时再次显示。 这样做的问题是,如果用户中断进程(例如通过 ctrl+c 发送 SIGINT),光标仍然会被隐藏。 最好的方法是在您的代码中设置一个信号处理程序,并在退出时调用 spinner.unhideCursor()
。 此库特意不为您执行此操作,以免干扰您可能已设置的任何信号处理程序。
请参阅 IBM-Swift/BlueSignals,了解处理信号的干净安全的方法。 您的项目的适当信号处理程序可能如下所示。
import Signals
let spinner = Spinner(pattern: .dots)
// ...
Signals.trap(signal: .int) { _ in
spinner.unhideCursor()
exit(0)
}