动画播放
⚠️ 警告:此功能已弃用,仅支持旧版运行时,不支持当前运行时。
选择起始动画
默认情况下,RiveViewModel 会自动播放你指定的动画或状态机。
SwiftUI
struct AnimationView: View {
var body: some View {
RiveViewModel(
fileName: "dancing_banana",
animationName: "Charleston",
artboardName: "Banana"
).view()
}
}
UIKit
class AnimationViewController: UIViewController {
@IBOutlet weak var riveView: RiveView!
var bananaVM = RiveViewModel(
fileName: "dancing_banana",
animationName: "Charleston",
artboardName: "Banana"
)
override func viewDidLoad() {
bananaVM.setView(riveView)
}
}
控制播放
调用播放控制
创建 RiveViewModel 后,你可以在此视图模型的引用上调用动画播放控制方法。
通常情况下,这已经足以显示你的 Rive 资源。但是,当你需要更精细地控制播放时机时,我们提供了一些方便的控制方法。
你还可以根据需要选择动画的循环模式作为附加参数。除了播放动画外,你同样可以暂停、停止和重置动画。
播放方法:
play(animationName: String? = nil, loop: Loop = .autoLoop, direction: Direction = .autoDirection)animationName- 要播放的动画名称loop- 播放动画的循环模式。可选值如下:oneShot- 播放动画一次loop- 播放动画并从设置的起始时间重复pingPong- 播放动画从开始 → 结束,然后重复时从结束 → 开始autoLoop(默认)- 按动画上设置的循环设置播放
direction- 播放动画的方向backwards- 反向播放动 画时间线forwards- 正向播放动画时间线autoDirection- 按动画上设置的方向播放
pause()stop()reset()
播放
如果你将 autoplay 设置为 false,可以很简单地播放活动动画或状态机。
simpleVM.play()
如果活动画板上有多个动画,你可以播放特定的一个。
simpleVM.play(animationName: "Fancy Animation")
暂停/停止/重置
根据应用中的某些事件,你可能需要进一步调整播放。
simpleVM.pause()
simpleVM.stop()
simpleVM.reset()
播放器代理
此运行时允许在 RiveViewModel 上设置代理。你可以使用代理定义函数来挂钩某些播放事件的调用。请参见以下类,了解如何挂钩以下播放事件:
- played(已播放)
- paused(已暂停)
- stopped(已停止)
- advanced(已前进)
- animation looped(动画已循环)
class ToggleViewModel: RiveViewModel {
private let onAnimation: String = "On"
private let offAnimation: String = "Off"
private let startAnimation: String = "StartOff"
var action: ((Bool) -> Void)? = nil
var isOn = false {
didSet {
stop()
play(animationName: isOn ? onAnimation : offAnimation)
action?(isOn)
}
}
init() {
super.init(fileName: "toggle", animationName: startAnimation, fit: .cover)
}
func view(_ action: ((Bool) -> Void)? = nil) -> some View {
self.action = action
return super.view().frame(width: 100, height: 50, alignment: .center)
}
// 当动画播放时
override func player(playedWithModel riveModel: RiveModel?) {
if let animationName = riveModel?.animation?.name() {...}
}
// 当动画暂停时
override func player(pausedWithModel riveModel: RiveModel?) {
if let animationName = riveModel?.animation?.name() {...}
}
// 当动画停止时
override func player(stoppedWithModel riveModel: RiveModel?) {
if let animationName = riveModel?.animation?.name() {...}
}
// 当动画循环时
override func player(loopedWithModel riveModel: RiveModel?, type: Int) {
if let animationName = riveModel?.animation?.name() {...}
}
// 当动画前进时
override func player(didAdvanceby seconds: Double, riveModel: RiveModel?) {...}
}