1 | #if canImport(React)
|
2 | import React
|
3 | #endif
|
4 |
|
5 | import Lottie
|
6 |
|
7 | @objc(LottieAnimationView)
|
8 | class AnimationViewManagerModule: RCTViewManager {
|
9 | override func view() -> UIView! {
|
10 | return ContainerView()
|
11 | }
|
12 |
|
13 | @objc override func constantsToExport() -> [AnyHashable : Any]! {
|
14 | return ["VERSION": 1]
|
15 | }
|
16 |
|
17 |
|
18 | @objc(play:fromFrame:toFrame:)
|
19 | public func play(_ reactTag: NSNumber, startFrame: NSNumber, endFrame: NSNumber) {
|
20 |
|
21 | self.bridge.uiManager.addUIBlock { (uiManager, viewRegistry) in
|
22 | guard let view = viewRegistry?[reactTag] as? ContainerView else {
|
23 | if (RCT_DEV == 1) {
|
24 | print("Invalid view returned from registry, expecting ContainerView")
|
25 | }
|
26 | return
|
27 | }
|
28 |
|
29 | let callback: LottieCompletionBlock = { animationFinished in
|
30 | if let onFinish = view.onAnimationFinish {
|
31 | onFinish(["isCancelled": animationFinished])
|
32 | }
|
33 | }
|
34 |
|
35 | if (startFrame.intValue != -1 && endFrame.intValue != -1) {
|
36 | view.play(fromFrame: AnimationFrameTime(truncating: startFrame), toFrame: AnimationFrameTime(truncating: endFrame), completion: callback)
|
37 | } else {
|
38 | view.play(completion: callback)
|
39 | }
|
40 | }
|
41 | }
|
42 |
|
43 | @objc(reset:)
|
44 | public func reset(_ reactTag: NSNumber) {
|
45 | self.bridge.uiManager.addUIBlock { uiManager, viewRegistry in
|
46 | guard let view = viewRegistry?[reactTag] as? ContainerView else {
|
47 | if (RCT_DEV == 1) {
|
48 | print("Invalid view returned from registry, expecting ContainerView")
|
49 | }
|
50 | return
|
51 | }
|
52 |
|
53 | view.reset()
|
54 | }
|
55 | }
|
56 |
|
57 | override static func requiresMainQueueSetup() -> Bool {
|
58 | return true
|
59 | }
|
60 |
|
61 | }
|