// // SPAPPTool.swift // ShortPlay // // Created by 曾觉新 on 2025/4/9. // import UIKit class SPAPPTool: NSObject { static func getAppDelegate() -> AppDelegate? { return UIApplication.shared.delegate as? AppDelegate } ///获得启动图 static func getLanuchViewController() -> UIViewController { let storyboard = UIStoryboard(name: "LaunchScreen", bundle: nil) let vc = storyboard.instantiateViewController(withIdentifier: "LaunchScreen") return vc } ///获取根视图 static func rootViewController() -> UIViewController? { return getKeyWindow()?.rootViewController } ///获取最上方视图 static func topViewController() -> UIViewController? { var resultVC: UIViewController? = self.rootViewController() if let rootNav = resultVC as? UINavigationController { resultVC = rootNav.topViewController } resultVC = self._topViewController(resultVC) while resultVC?.presentedViewController != nil { resultVC = self._topViewController(resultVC?.presentedViewController) } return resultVC } private static func _topViewController(_ vc: UIViewController?) -> UIViewController? { if vc is UINavigationController { return _topViewController((vc as? UINavigationController)?.topViewController) } else if vc is UITabBarController { return _topViewController((vc as? UITabBarController)?.selectedViewController) } else { return vc } } static func getKeyWindow() -> UIWindow? { var window: UIWindow? if #available(iOS 13.0, *) { window = UIApplication.shared.connectedScenes .filter({$0.activationState == .foregroundActive}) .map({$0 as? UIWindowScene}) .compactMap({$0}) .first?.windows .filter({$0.isKeyWindow}).first } if window == nil { window = UIApplication.shared.windows.first { $0.isKeyWindow } } if window == nil { window = UIApplication.shared.keyWindow } return window } } extension SPAPPTool { ///剪贴板复制 static func copy(text: String?) { if let text = text { let copy = UIPasteboard.general copy.string = text } } /** 震动反馈 */ static func impactFeedbackOccurred() { if #available(iOS 13.0, *) { UIImpactFeedbackGenerator(style: .heavy).impactOccurred(intensity: 1) } else { UIImpactFeedbackGenerator(style: .heavy).impactOccurred() } } }