import SwiftUI
import RiveRuntime
struct EventsView: View {
@StateObject private var rvm = RiveEventsViewModel()
var body: some View {
VStack {
rvm.view()
.frame(width: 400, height: 400)
Text("Event Message")
.font(.headline)
.padding(.bottom, 10)
Text(rvm.eventText)
.padding()
.background(rvm.eventText.isEmpty ? Color.clear : Color.black)
.foregroundColor(.white)
.cornerRadius(10)
}
}
}
class RiveEventsViewModel: RiveViewModel {
@Published var eventText = ""
init() {
super.init(fileName: "rating_animation")
}
func view() -> some View {
return super.view()
.frame(width: 400, height: 400, alignment: .center)
}
@objc func onRiveEventReceived(onRiveEvent riveEvent: RiveEvent) {
debugPrint("Event Name: \(riveEvent.name())")
debugPrint("Event Type: \(riveEvent.type())")
if let openUrlEvent = riveEvent as? RiveOpenUrlEvent {
debugPrint("Open URL Event Properties: \(openUrlEvent.properties())")
if let url = URL(string: openUrlEvent.url()) {
#if os(iOS) || os(visionOS) || os(tvOS)
UIApplication.shared.open(url)
#else
NSWorkspace.shared.open(url)
#endif
}
} else if let generalEvent = riveEvent as? RiveGeneralEvent {
let properties = generalEvent.properties()
debugPrint("General Event Properties: \(properties)")
if let msg = properties["message"] as? String {
eventText = msg
}
}
}
}