80 lines
2.4 KiB
Swift
80 lines
2.4 KiB
Swift
//
|
||
// PhotoBrowserManager.swift
|
||
// Crush
|
||
//
|
||
// Created by Leon on 2025/7/26.
|
||
//
|
||
|
||
import UIKit
|
||
|
||
class PhotoBrowserManager {
|
||
public static let shared = PhotoBrowserManager()
|
||
private var browserWindow: UIWindow?
|
||
|
||
private init() {}
|
||
|
||
private func getBrowserWindow() -> UIWindow {
|
||
// if browserWindow == nil {
|
||
// browserWindow = UIWindow(frame: UIScreen.main.bounds)
|
||
// browserWindow?.backgroundColor = .clear
|
||
// }
|
||
// return browserWindow!
|
||
guard let windowScene = UIApplication.shared.connectedScenes
|
||
.first(where: { $0.activationState == .foregroundActive }) as? UIWindowScene
|
||
else {
|
||
return UIWindow.applicationKey!
|
||
}
|
||
let window = UIWindow(windowScene: windowScene)
|
||
window.frame = UIScreen.main.bounds
|
||
return window
|
||
}
|
||
|
||
static func hidePhotoBrowserWindow() {
|
||
shared.hidePhotoBrowser()
|
||
}
|
||
|
||
func showPhotoBrowser(with models: [PhotoBrowserModel], currentIndex: Int) {
|
||
showPhotoBrowser(with: models, currentIndex: currentIndex, type: .normal)
|
||
}
|
||
|
||
func showPhotoBrowser(with models: [PhotoBrowserModel], currentIndex: Int, type: PhotoBrowserType) {
|
||
guard !models.isEmpty else { return }
|
||
let safeIndex = max(0, min(currentIndex, models.count - 1))
|
||
|
||
let window = getBrowserWindow()
|
||
window.windowLevel = .statusBar - 2
|
||
window.isHidden = false
|
||
self.browserWindow = window
|
||
|
||
let browserVC = PhotoBrowserController()
|
||
browserVC.type = type
|
||
browserVC.setupView(with: models, currentIndex: safeIndex)
|
||
let navc = CLNavigationController(rootViewController: browserVC)
|
||
window.rootViewController = navc//browserVC
|
||
}
|
||
|
||
func setupPhotoBrowserType(_ type: PhotoBrowserType) {
|
||
guard let browserVC = browserWindow?.rootViewController as? PhotoBrowserController else { return }
|
||
browserVC.type = type
|
||
}
|
||
|
||
func hidePhotoBrowser() {
|
||
browserWindow?.isHidden = true
|
||
browserWindow?.rootViewController = nil
|
||
}
|
||
|
||
deinit {
|
||
print("♻️PhotoBrowserManager dealloc")
|
||
}
|
||
}
|
||
|
||
enum ImageBrowser {
|
||
static func show(models: [PhotoBrowserModel], index: Int, type: PhotoBrowserType) {
|
||
PhotoBrowserManager.shared.showPhotoBrowser(with: models, currentIndex: index, type: type)
|
||
}
|
||
|
||
static func hide() {
|
||
PhotoBrowserManager.hidePhotoBrowserWindow()
|
||
}
|
||
}
|