mirror of
https://github.com/rive-app/rive-ios.git
synced 2026-01-18 17:11:28 +01:00
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:
@@ -1 +1 @@
|
||||
82c66ee2510f5833664394ac8c49fcfd82fe3182
|
||||
bfae2e978ea9fe5d488776b77de318080deb198f
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user