diff --git a/.rive_head b/.rive_head index d949a0d..fbd1493 100644 --- a/.rive_head +++ b/.rive_head @@ -1 +1 @@ -82c66ee2510f5833664394ac8c49fcfd82fe3182 +bfae2e978ea9fe5d488776b77de318080deb198f diff --git a/Source/RiveDisplayLink.swift b/Source/RiveDisplayLink.swift index e703867..4ea589a 100644 --- a/Source/RiveDisplayLink.swift +++ b/Source/RiveDisplayLink.swift @@ -26,6 +26,12 @@ class RiveCADisplayLink: RiveDisplayLink { typealias Tick = () -> Void private lazy var displayLink: CADisplayLink = { +#if !os(visionOS) + if let displayLink = windowScene?.screen.displayLink(withTarget: self, selector: #selector(_tick)) { + return displayLink + } +#endif + return CADisplayLink(target: self, selector: #selector(_tick)) }() @@ -38,10 +44,12 @@ class RiveCADisplayLink: RiveDisplayLink { displayLink.targetTimestamp } + private let windowScene: UIWindowScene? private let tick: Tick private var isActive = false - init(tick: @escaping () -> Void) { + init(windowScene: UIWindowScene?, tick: @escaping () -> Void) { + self.windowScene = windowScene self.tick = tick } diff --git a/Source/RiveView.swift b/Source/RiveView.swift index f98a531..a844157 100644 --- a/Source/RiveView.swift +++ b/Source/RiveView.swift @@ -293,7 +293,7 @@ open class RiveView: RiveRendererView { } #else guard displaySync == nil else { return } - displaySync = RiveCADisplayLink { [weak self] in + displaySync = RiveCADisplayLink(windowScene: window?.windowScene) { [weak self] in self?.tick() } if let fps = userPreferredFramesPerSecond {