Swift 方法交换:实现应用方向控制
要在 Swift 中交换一个方法,你需要使用method_exchangeImplementations 方法。首先,你需要创建一个扩展来添加新的方法:
extension UIApplicationDelegate {
@objc func my_application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
// 添加你想要的逻辑
return .portrait
}
}
然后,在application(_:supportedInterfaceOrientationsFor:) 方法中,使用method_exchangeImplementations 方法交换原始方法和新方法:
class AppDelegate: UIResponder, UIApplicationDelegate {
// ...
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
let originalSelector = #selector(application(_:supportedInterfaceOrientationsFor:))
let swizzledSelector = #selector(self.my_application(_:supportedInterfaceOrientationsFor:))
let originalMethod = class_getInstanceMethod(type(of: self), originalSelector)!
let swizzledMethod = class_getInstanceMethod(type(of: self), swizzledSelector)!
method_exchangeImplementations(originalMethod, swizzledMethod)
// 调用新方法
return self.my_application(application, supportedInterfaceOrientationsFor: window)
}
// ...
}
这样,你就可以在新方法中添加你想要的逻辑,并在交换后调用新方法。
原文地址: https://www.cveoy.top/t/topic/pj7Q 著作权归作者所有。请勿转载和采集!