Nav apraksta

ViewControllerTransitioningProxy.swift 1.7KB

    // // ViewControllerTransitioningProxy.swift // PaiaiUIKit // // Created by ffib on 2019/1/28. // Copyright © 2019 yb. All rights reserved. // import Foundation class ViewControllerTransitioningProxy: NSObject, UIViewControllerTransitioningDelegate { weak var delegate: ViewControllerTransitioningDelegate? init(target: ViewControllerTransitioningDelegate) { delegate = target } func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? { return delegate?.animationController(forDismissed: dismissed) } func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? { return delegate?.animationController(forPresented: presented, presenting: presenting, source: source) } } extension UIViewController { private struct AssociatedKeys { static var proxyKey = "ViewControllerTransitioningProxyKey" } private var proxy: ViewControllerTransitioningProxy? { get { return objc_getAssociatedObject(self, &AssociatedKeys.proxyKey) as? ViewControllerTransitioningProxy } set { objc_setAssociatedObject(self, &AssociatedKeys.proxyKey, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) } } func setTransitioningDelegate<T: ViewControllerTransitioningDelegate>(_ target: T) { proxy = ViewControllerTransitioningProxy(target: target) transitioningDelegate = proxy } }