refactor(ios): use active screen display link when available (#9624) bfae2e978e

* refactor(ios): use active screen display link when available

* project(ios): run pr ios tests on xcode 15.4

* fix: conditionally build screen display link for non-visionos

Co-authored-by: David Skuza <david@rive.app>
This commit is contained in:
dskuza
2025-05-08 20:17:59 +00:00
parent 69772cbc6d
commit 725ccc4766
3 changed files with 11 additions and 3 deletions

View File

@@ -1 +1 @@
82c66ee2510f5833664394ac8c49fcfd82fe3182
bfae2e978ea9fe5d488776b77de318080deb198f

View File

@@ -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
}

View File

@@ -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 {