跳到主要内容

状态机

概览​

状态机是 Rive 中管理动画状态和过渡的系统。它们允许你定义图形如何响应输入和事件,在不同动画状态之间无缝过渡。

控制播放​

状态机播放由 Rive 视图的配置控制。通常,状态机会自动开始播放。

播放状态机​

当前运行时​

默认情况下,Rive 对象的状态机在 RiveUIView 使用时会自动播放。

以下部分假设你已阅读了获取画板概述。

获取状态机​

创建 File 和 Artboard 后,你可以检索 StateMachine 类型的信息并创建它们。

// 获取所有状态机名称
let stateMachineNames = try await artboard.getStateMachineNames()
// 获取画板的默认状态机
let defaultStateMachine = try await artboard.createStateMachine()
// 按名称从画板获取状态机
let stateMachineByName = try await artboard.createStateMachine("StateMachine")

请注意,这些都是标记为 @MainActor 的异步抛出函数。创建状态机时,如果可用,还会绑定编辑器中创作的主视图模型和全局视图模型默认实例。绑定可能抛出 StateMachineError;画板查找失败则抛出 ArtboardError。若要提供由你自行保留的实例,请使用 createStateMachine("StateMachine", binding: instance) 以及数据绑定中描述的可选 globals builder。

这些函数抛出异常的一个例子是,如果你使用不在源 Artboard 中的名称调用 .createStateMachine(_:),将抛出 ArtboardError.invalidStateMachine(String)。

使用状态机​

请记住,视图的 Rive 配置是 Rive 类型。在概述中,我们展示了仅使用文件初始化 Rive 对象。但是,你可以使用特定状态机初始化 Rive 对象:

let worker = try await Worker()
let file = try await File(source: .local("my_file", Bundle.main), worker: worker)
let artboardByName = try await file.createArtboard("Artboard")
let stateMachine = try await artboardByName.createStateMachine("StateMachine")
let rive = try await Rive(file: file, artboard: artboardByName, stateMachine: stateMachine)

旧版运行时​

自动播放状态机​

默认情况下,RiveViewModel 会自动播放给定的状态机。

SwiftUI​
var stateChanger = RiveViewModel(
fileName: "skills",
stateMachineName: "Designer's Test",
artboardName: "Banana"
)
UIKit​
class StateMachineViewController: UIViewController {
var viewModel = RiveViewModel(
fileName: "skills",
stateMachineName: "Designer's Test",
artboardName: "Banana"
)

override public func loadView() {
super.loadView()

guard let stateMachineView = view as? StateMachineView else {
fatalError("Could not find StateMachineView")
}

viewModel.setView(stateMachineView.riveView)
}
}
播放​

如果你将 autoplay 设置为 false,可以简单地播放活动动画或状态机。

simpleVM.play()
暂停/停止/重置​

根据应用中的某些事件,你可能需要进一步调整播放。

simpleVM.pause()
simpleVM.stop()
simpleVM.reset()
看完还有疑问?进群交流下!
与众多 Rive 创作者、开发者一起交流探讨与答疑解惑。
加入交流群