123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- import UIKit
- extension NSObject: InitializableClass {}
- internal extension UIView {
- @discardableResult func untransformed(_ block: () -> CGFloat) -> CGFloat {
- let t = transform
- transform = .identity
- let value = block()
- transform = t
- return value
- }
- func bringToFront() {
- superview?.bringSubviewToFront(self)
- }
- func untransform(_ block: () -> Void) {
- untransformed { () -> CGFloat in
- block()
- return 0
- }
- }
- static func animationsEnabled(_ enabled: Bool = true, _ block: () -> Void) {
- let a = areAnimationsEnabled
- setAnimationsEnabled(enabled)
- block()
- setAnimationsEnabled(a)
- }
- }
- internal extension UIViewController {
-
- var activeViewController: UIViewController {
- switch self {
- case let navigationController as UINavigationController:
- return navigationController.topViewController?.activeViewController ?? self
- case let tabBarController as UITabBarController:
- return tabBarController.selectedViewController?.activeViewController ?? self
- case let splitViewController as UISplitViewController:
- return splitViewController.viewControllers.last?.activeViewController ?? self
- default:
- return self
- }
- }
-
- var topMostViewController: UIViewController {
- let activeViewController = self.activeViewController
- return activeViewController.presentedViewController?.topMostViewController ?? activeViewController
- }
- var containerViewController: UIViewController {
- return navigationController?.containerViewController ??
- tabBarController?.containerViewController ??
- splitViewController?.containerViewController ??
- self
- }
- @objc var isHidden: Bool {
- return presentingViewController == nil
- }
- }
- internal extension UIGestureRecognizer {
- convenience init(addTo view: UIView, target: Any, action: Selector) {
- self.init(target: target, action: action)
- view.addGestureRecognizer(self)
- }
- convenience init?(addTo view: UIView?, target: Any, action: Selector) {
- guard let view = view else { return nil }
- self.init(addTo: view, target: target, action: action)
- }
- func remove() {
- view?.removeGestureRecognizer(self)
- }
- }
- internal extension UIPanGestureRecognizer {
- var canSwitch: Bool {
- return !(self is UIScreenEdgePanGestureRecognizer)
- }
- var xTranslation: CGFloat {
- return view?.untransformed {
- return self.translation(in: view).x
- } ?? 0
- }
- var xVelocity: CGFloat {
- return view?.untransformed {
- return self.velocity(in: view).x
- } ?? 0
- }
- }
- internal extension UIApplication {
- var keyWindow: UIWindow? {
- return UIApplication.shared.windows.filter { $0.isKeyWindow }.first
- }
- }
|