Эх сурвалжийг харах

【FixBug】修改hook方式

xingcheng02 1 жил өмнө
parent
commit
826388e9f3

+ 2 - 1
XCTheme.podspec

@@ -28,12 +28,13 @@ A Theme Manager for C Code Develop & C Notebook.
   s.source           = { :git => 'https://git.forgetive.org/xcbosa/XCTheme.git', :tag => s.version.to_s }
   # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
 
-  s.ios.deployment_target = '13.0'
+  s.ios.deployment_target = '14.0'
 
   s.source_files = 'XCTheme/Classes/**/*'
   
   s.dependency 'XCModuleLoader'
   s.dependency 'XCZip'
+  s.dependency 'XCNotificationCenter'
   
   # s.resource_bundles = {
   #   'XCTheme' => ['XCTheme/Assets/*.png']

+ 20 - 6
XCTheme/Classes/Impl/XCThemeManager.swift

@@ -6,6 +6,9 @@
 //
 
 import Foundation
+import XCNotificationCenter
+
+fileprivate let kXCThemeManagerInterfaceStyleChangedNotifyKey = "kXCThemeManagerInterfaceStyleChangedNotifyKey"
 
 @objc
 @objcMembers
@@ -61,14 +64,11 @@ public class XCThemeManager: NSObject {
         }
         loaded = true
         
-        if let defaultThemeBlock = self.defaultThemeBlock,
-            let defaultTheme = defaultThemeBlock() {
-            self.selectedTheme = self.theme(forId: defaultTheme)
-        }
-        
         let originalMethod = class_getInstanceMethod(UIViewController.classForCoder(), #selector(UIViewController.viewDidLoad))!
         let newMethod = class_getInstanceMethod(UIViewController.classForCoder(), #selector(UIViewController.XCThemeManagerSwizzledViewDidLoad))!
         method_exchangeImplementations(originalMethod, newMethod)
+        
+        self.setupDefaultTheme()
     }
     
     private func theme(forId id: String) -> XCThemeSpec? {
@@ -79,6 +79,13 @@ public class XCThemeManager: NSObject {
         self.loadManagerIfNeeded()
     }
     
+    public func setupDefaultTheme() {
+        if let defaultThemeBlock = self.defaultThemeBlock,
+            let defaultTheme = defaultThemeBlock() {
+            self.selectedTheme = self.theme(forId: defaultTheme)
+        }
+    }
+    
     public var currentUserInterfaceStyle: UIUserInterfaceStyle {
         if let theme = self.selectedTheme {
             return theme.interfaceStyle
@@ -93,12 +100,12 @@ public class XCThemeManager: NSObject {
     
     private func forceThemeInterfaceStyleForWindows() {
         UIApplication.shared.connectedScenes
-            .filter( {$0.activationState == .foregroundActive})
             .map( {$0 as? UIWindowScene})
             .forEach({ $0?.windows.forEach({
                 $0.overrideUserInterfaceStyle = self.currentUserInterfaceStyle
             })
         })
+        XCNotificationCenter.shared.post(notificationNamed: kXCThemeManagerInterfaceStyleChangedNotifyKey, attachedObject: self.currentUserInterfaceStyle)
     }
     
 }
@@ -108,6 +115,13 @@ fileprivate extension UIViewController {
     @objc func XCThemeManagerSwizzledViewDidLoad() {
         self.XCThemeManagerSwizzledViewDidLoad()
         XCThemeManager.shared.forceThemeInterfaceStyle(self)
+        XCNotificationCenter.shared.addObserver(self, forName: kXCThemeManagerInterfaceStyleChangedNotifyKey) {
+            [weak self] value in
+            guard let self = self else { return }
+            if let newStyle = value as? UIUserInterfaceStyle {
+                self.overrideUserInterfaceStyle = newStyle
+            }
+        }
     }
     
 }