diff --git a/Sources/Bonsplit/Internal/Controllers/SplitViewController.swift b/Sources/Bonsplit/Internal/Controllers/SplitViewController.swift index f49a8c5..e4f3745 100644 --- a/Sources/Bonsplit/Internal/Controllers/SplitViewController.swift +++ b/Sources/Bonsplit/Internal/Controllers/SplitViewController.swift @@ -28,6 +28,8 @@ final class SplitViewController { /// Callback for geometry changes var onGeometryChange: (() -> Void)? + + let animator: SplitAnimator = SplitAnimator() init(rootNode: SplitNode? = nil) { if let rootNode { diff --git a/Sources/Bonsplit/Internal/Utilities/SplitAnimator.swift b/Sources/Bonsplit/Internal/Utilities/SplitAnimator.swift index ba17b39..fad0b73 100644 --- a/Sources/Bonsplit/Internal/Utilities/SplitAnimator.swift +++ b/Sources/Bonsplit/Internal/Utilities/SplitAnimator.swift @@ -23,14 +23,11 @@ final class SplitAnimator { private var displayLink: CVDisplayLink? private var animations: [UUID: Animation] = [:] - /// Shared animator instance - static let shared = SplitAnimator() - /// Animation duration in seconds nonisolated static let animationDuration: CFTimeInterval = 0.16 // MARK: - Initialization - private init() { + package init() { setupDisplayLink() } diff --git a/Sources/Bonsplit/Internal/Views/SplitContainerView.swift b/Sources/Bonsplit/Internal/Views/SplitContainerView.swift index 411cc98..68b41fc 100644 --- a/Sources/Bonsplit/Internal/Views/SplitContainerView.swift +++ b/Sources/Bonsplit/Internal/Views/SplitContainerView.swift @@ -67,11 +67,11 @@ struct SplitContainerView: NSViewRepresentabl splitState.dividerPosition = 0.5 // Wait for layout - DispatchQueue.main.async { + Task { // Show the new pane and animate splitView.arrangedSubviews[newPaneIndex].isHidden = false - SplitAnimator.shared.animate( + controller.animator.animate( splitView: splitView, from: startPosition, to: targetPosition