Swift Media Player
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

94 lines
3.5 KiB

//
// Created by Marco Schmickler.
// Copyright (c) 2023 Marco Schmickler. All rights reserved.
//
import UIKit
class SceneDelegate: UIResponder, UIWindowSceneDelegate, UISplitViewControllerDelegate {
var window: UIWindow?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let _ = scene as? UIWindowScene else { return }
setupSplitViewController()
}
func sceneDidBecomeActive(_ scene: UIScene) {
NetworkManager.sharedInstance.alive()
}
func sceneDidEnterBackground(_ scene: UIScene) {
(UIApplication.shared.delegate as? AppDelegate)?.saveContext()
}
private func setupSplitViewController() {
guard let storyboardSplit = window?.rootViewController as? UISplitViewController else { return }
guard let split = modernSplitView(from: storyboardSplit) else { return }
configureSplitViewDisplay(split)
split.delegate = self
let detailNav = split.viewController(for: .secondary) as? UINavigationController
detailNav?.topViewController?.navigationItem.leftBarButtonItem = nil
guard let masterNav = split.viewController(for: .primary) as? UINavigationController,
let controller = masterNav.topViewController as? MasterViewController else { return }
controller.delegate = NetworkDelegate()
controller.model.items = LocalManager.sharedInstance.model!.items
}
private func modernSplitView(from split: UISplitViewController) -> UISplitViewController? {
guard split.style != .doubleColumn else { return split }
guard let primary = split.viewControllers.first,
let secondary = split.viewControllers.last else {
return nil
}
let modernSplit = UISplitViewController(style: .doubleColumn)
modernSplit.setViewController(primary, for: .primary)
modernSplit.setViewController(secondary, for: .secondary)
window?.rootViewController = modernSplit
return modernSplit
}
private func configureSplitViewDisplay(_ split: UISplitViewController) {
guard UIDevice.current.userInterfaceIdiom == .pad else {
split.preferredDisplayMode = .automatic
return
}
split.minimumPrimaryColumnWidth = 220
split.maximumPrimaryColumnWidth = 280
split.preferredPrimaryColumnWidth = 240
if #available(iOS 26.0, *) {
split.minimumSecondaryColumnWidth = 320
split.preferredSecondaryColumnWidthFraction = 0.68
}
split.preferredSplitBehavior = .tile
split.preferredDisplayMode = .oneBesideSecondary
split.show(.primary)
}
// MARK: - Split view
func splitViewController(_ splitViewController: UISplitViewController, collapseSecondary secondaryViewController: UIViewController, onto primaryViewController: UIViewController) -> Bool {
if let nav = secondaryViewController as? UINavigationController,
let detail = nav.topViewController as? DetailViewController,
detail.detailItem == nil {
return true
}
return false
}
func splitViewController(_ svc: UISplitViewController, displayModeForExpandingToProposedDisplayMode proposedDisplayMode: UISplitViewController.DisplayMode) -> UISplitViewController.DisplayMode {
if UIDevice.current.userInterfaceIdiom == .pad {
return .oneBesideSecondary
}
return proposedDisplayMode
}
}