跳到主要内容

状态机

概览

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

控制播放

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

播放状态机

当前运行时

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

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

获取状态机

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

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

请注意,这些都是标记为 @MainActor 的异步抛出函数。由于它们是在 Artboard 对象上调用的函数,任何抛出的错误都将是 ArtboardError 类型。

这些函数抛出异常的一个例子是,如果你使用不在源 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()