From 79f31196f3e65bc4d12b19d19273350042cfc176 Mon Sep 17 00:00:00 2001 From: Zachary Duncan Date: Wed, 8 Jun 2022 00:09:42 -0400 Subject: [PATCH] Gave RiveViewModel specialized inits so that users are presented without only an animation or a state machine param --- .../Storyboard/MultipleAnimations.swift | 4 +- .../SwiftUI/SwiftMultipleAnimations.swift | 4 +- .../SwiftUI/SwiftTestParityAnimSM.swift | 2 +- .../Examples/ViewModel/RiveSwitch.swift | 2 +- Source/Components/RiveViewModel.swift | 77 ++++++++++++++----- Tests/RiveDelegatesTest.swift | 2 +- 6 files changed, 65 insertions(+), 26 deletions(-) diff --git a/Example-iOS/Source/Examples/Storyboard/MultipleAnimations.swift b/Example-iOS/Source/Examples/Storyboard/MultipleAnimations.swift index 97f2f009..447b3947 100644 --- a/Example-iOS/Source/Examples/Storyboard/MultipleAnimations.swift +++ b/Example-iOS/Source/Examples/Storyboard/MultipleAnimations.swift @@ -18,10 +18,10 @@ class MultipleAnimationsController: UIViewController { @IBOutlet weak var rviewStar: RiveView! var rSquareGoAround = RiveViewModel( - fileName: "artboard_animations", artboardName: "Square", animationName: "goaround" + fileName: "artboard_animations", animationName: "goaround", artboardName: "Square" ) var rSquareRollAround = RiveViewModel( - fileName: "artboard_animations", artboardName: "Square", animationName: "rollaround" + fileName: "artboard_animations", animationName: "rollaround", artboardName: "Square" ) var rCircle = RiveViewModel( fileName: "artboard_animations", artboardName: "Circle" diff --git a/Example-iOS/Source/Examples/SwiftUI/SwiftMultipleAnimations.swift b/Example-iOS/Source/Examples/SwiftUI/SwiftMultipleAnimations.swift index 34ccb8d9..f05f7d54 100644 --- a/Example-iOS/Source/Examples/SwiftUI/SwiftMultipleAnimations.swift +++ b/Example-iOS/Source/Examples/SwiftUI/SwiftMultipleAnimations.swift @@ -19,11 +19,11 @@ struct SwiftMultipleAnimations: DismissableView { ScrollView{ VStack { Text("Square - go around") - RiveViewModel(model(), artboardName: "Square", animationName: "goaround").view() + RiveViewModel(model(), animationName: "goaround", artboardName: "Square").view() .aspectRatio(1, contentMode: .fit) Text("Square - roll around") - RiveViewModel(model(), artboardName: "Square", animationName: "rollaround").view() + RiveViewModel(model(), animationName: "rollaround", artboardName: "Square").view() .aspectRatio(1, contentMode: .fit) Text("Circle") diff --git a/Example-iOS/Source/Examples/SwiftUI/SwiftTestParityAnimSM.swift b/Example-iOS/Source/Examples/SwiftUI/SwiftTestParityAnimSM.swift index 7d9f2d9d..7e970a38 100644 --- a/Example-iOS/Source/Examples/SwiftUI/SwiftTestParityAnimSM.swift +++ b/Example-iOS/Source/Examples/SwiftUI/SwiftTestParityAnimSM.swift @@ -17,7 +17,7 @@ struct SwiftTestParityAnimSM: DismissableView { SwiftVMPlayer( viewModels: RiveViewModel(fileName: "teststatemachine", stateMachineName: "State Machine 1", autoPlay: false), - RiveViewModel(fileName: "testanimation", autoPlay: false, animationName: "Move") + RiveViewModel(fileName: "testanimation", animationName: "Move", autoPlay: false) ) } } diff --git a/Example-iOS/Source/Examples/ViewModel/RiveSwitch.swift b/Example-iOS/Source/Examples/ViewModel/RiveSwitch.swift index b92c1b56..5c924b43 100644 --- a/Example-iOS/Source/Examples/ViewModel/RiveSwitch.swift +++ b/Example-iOS/Source/Examples/ViewModel/RiveSwitch.swift @@ -24,7 +24,7 @@ class RiveSwitch: RiveViewModel { } init() { - super.init(fileName: "switch", fit: .fitCover, animationName: startAnimation) + super.init(fileName: "switch", animationName: startAnimation, fit: .fitCover) } func view(_ action: ((Bool) -> Void)? = nil) -> some View { diff --git a/Source/Components/RiveViewModel.swift b/Source/Components/RiveViewModel.swift index 5d0fde52..e166214f 100644 --- a/Source/Components/RiveViewModel.swift +++ b/Source/Components/RiveViewModel.swift @@ -44,59 +44,98 @@ open class RiveViewModel: NSObject, ObservableObject, RiveFileDelegate, RiveStat public init( _ model: RiveModel, - stateMachineName: String? = nil, + stateMachineName: String?, fit: RiveRuntime.Fit = .fitContain, alignment: RiveRuntime.Alignment = .alignmentCenter, autoPlay: Bool = true, - artboardName: String? = nil, - animationName: String? = nil + artboardName: String? = nil ) { - self.riveModel = model self.fit = fit self.alignment = alignment self.autoPlay = autoPlay - super.init() - - sharedInit(artboardName: artboardName, stateMachineName: stateMachineName, animationName: animationName) + riveModel = model + sharedInit(artboardName: artboardName, stateMachineName: stateMachineName, animationName: nil) + } + + public init( + _ model: RiveModel, + animationName: String? = nil, + fit: RiveRuntime.Fit = .fitContain, + alignment: RiveRuntime.Alignment = .alignmentCenter, + autoPlay: Bool = true, + artboardName: String? = nil + ) { + self.fit = fit + self.alignment = alignment + self.autoPlay = autoPlay + super.init() + riveModel = model + sharedInit(artboardName: artboardName, stateMachineName: nil, animationName: animationName) + } + + public init( + fileName: String, + stateMachineName: String?, + fit: RiveRuntime.Fit = .fitContain, + alignment: RiveRuntime.Alignment = .alignmentCenter, + autoPlay: Bool = true, + artboardName: String? = nil + ) { + self.fit = fit + self.alignment = alignment + self.autoPlay = autoPlay + super.init() + riveModel = try! RiveModel(fileName: fileName) + sharedInit(artboardName: artboardName, stateMachineName: stateMachineName, animationName: nil) } public init( fileName: String, - stateMachineName: String? = nil, + animationName: String? = nil, fit: RiveRuntime.Fit = .fitContain, alignment: RiveRuntime.Alignment = .alignmentCenter, autoPlay: Bool = true, - artboardName: String? = nil, - animationName: String? = nil + artboardName: String? = nil ) { + self.fit = fit + self.alignment = alignment + self.autoPlay = autoPlay + super.init() riveModel = try! RiveModel(fileName: fileName) + sharedInit(artboardName: artboardName, stateMachineName: nil, animationName: animationName) + } + + public init( + webURL: String, + stateMachineName: String?, + fit: RiveRuntime.Fit = .fitContain, + alignment: RiveRuntime.Alignment = .alignmentCenter, + autoPlay: Bool = true, + artboardName: String? = nil + ) { self.fit = fit self.alignment = alignment self.autoPlay = autoPlay - super.init() - - sharedInit(artboardName: artboardName, stateMachineName: stateMachineName, animationName: animationName) + riveModel = RiveModel(webURL: webURL, delegate: self) + defaultModel = RiveModelBuffer(artboardName: artboardName, stateMachineName: stateMachineName, animationName: nil) } public init( webURL: String, - stateMachineName: String? = nil, + animationName: String? = nil, fit: RiveRuntime.Fit = .fitContain, alignment: RiveRuntime.Alignment = .alignmentCenter, autoPlay: Bool = true, - artboardName: String? = nil, - animationName: String? = nil + artboardName: String? = nil ) { self.fit = fit self.alignment = alignment self.autoPlay = autoPlay - super.init() - riveModel = RiveModel(webURL: webURL, delegate: self) - defaultModel = RiveModelBuffer(artboardName: artboardName, stateMachineName: stateMachineName, animationName: animationName) + defaultModel = RiveModelBuffer(artboardName: artboardName, stateMachineName: nil, animationName: animationName) } private func sharedInit(artboardName: String?, stateMachineName: String?, animationName: String?) { diff --git a/Tests/RiveDelegatesTest.swift b/Tests/RiveDelegatesTest.swift index fe729252..5577325a 100644 --- a/Tests/RiveDelegatesTest.swift +++ b/Tests/RiveDelegatesTest.swift @@ -164,7 +164,7 @@ class DelegatesTest: XCTestCase { let delegate = DrDelegate() let file = try RiveFile(testfileName: "multiple_animations") let model = RiveModel(riveFile: file) - let viewModel = RiveViewModel(model, autoPlay: false, animationName: "one") + let viewModel = RiveViewModel(model, animationName: "one", autoPlay: false) let view = viewModel.createRiveView() view.playerDelegate = delegate