diff --git a/TIUIElements/Sources/Views/Skeletons/Protocols/SkeletonsPresenter.swift b/TIUIElements/Sources/Views/Skeletons/Protocols/SkeletonsPresenter.swift index 31cf529a..b808a121 100644 --- a/TIUIElements/Sources/Views/Skeletons/Protocols/SkeletonsPresenter.swift +++ b/TIUIElements/Sources/Views/Skeletons/Protocols/SkeletonsPresenter.swift @@ -23,7 +23,6 @@ import UIKit public protocol SkeletonsPresenter { - var baseView: UIView? { get } var skeletonsConfiguration: SkeletonsConfiguration { get } var isSkeletonsHidden: Bool { get } var viewsToSkeletone: [UIView] { get } @@ -41,33 +40,11 @@ extension SkeletonsPresenter { public var skeletonsConfiguration: SkeletonsConfiguration { SkeletonsConfiguration() } - - public func showSkeletons() { - baseView?.showSkeletons(on: nil, - viewsToSkeletone: viewsToSkeletone, - skeletonsConfiguration) - } - - public func hideSkeletons() { - baseView?.hideSkeletons(baseView: nil) - } - - public func startAnimation() { - baseView?.startAnimation(baseView: nil) - } - - public func stopAnimation() { - baseView?.stopAnimation(baseView: nil) - } } // MARK: - UIView + SkeletonsPresenter extension SkeletonsPresenter where Self: UIView { - public var baseView: UIView? { - self - } - public var isSkeletonsHidden: Bool { (layer.sublayers ?? []).first { $0 is SkeletonLayer } == nil } @@ -75,20 +52,26 @@ extension SkeletonsPresenter where Self: UIView { public var viewsToSkeletone: [UIView] { skeletonableViews } + + public func showSkeletons() { + showSkeletons(viewsToSkeletone: viewsToSkeletone, + skeletonsConfiguration) + } } // MARK: - UIViewController + SkeletonsPresenter extension SkeletonsPresenter where Self: UIViewController { - public var baseView: UIView? { - view - } - public var isSkeletonsHidden: Bool { (view.layer.sublayers ?? []).first { $0 is SkeletonLayer } == nil } public var viewsToSkeletone: [UIView] { - baseView?.skeletonableViews ?? view.skeletonableViews + view.skeletonableViews + } + + public func showSkeletons() { + showSkeletons(viewsToSkeletone: viewsToSkeletone, + skeletonsConfiguration) } } diff --git a/TIUIElements/Sources/Views/Skeletons/UIView+PresentingSkeletons.swift b/TIUIElements/Sources/Views/Skeletons/UIView+PresentingSkeletons.swift index c1838cf0..9addca50 100644 --- a/TIUIElements/Sources/Views/Skeletons/UIView+PresentingSkeletons.swift +++ b/TIUIElements/Sources/Views/Skeletons/UIView+PresentingSkeletons.swift @@ -26,53 +26,51 @@ extension UIView { // MARK: - Public methods - public func showSkeletons(on baseView: UIView?, - viewsToSkeletone: [UIView]? = nil, - _ config: SkeletonsConfiguration = .init()) { + /// Shows skeletons on the view + /// + /// - Parameters: + /// - viewsToSkeletone: views that will be converted to skeletones. If nil was passed subviews will be converted to skeletons + /// - config: configuration of the skeletons' layers + public func showSkeletons(viewsToSkeletone: [UIView]?, + _ config: SkeletonsConfiguration) { - let baseView = baseView ?? self let viewsToSkeletone = viewsToSkeletone ?? skeletonableViews + isUserInteractionEnabled = false - baseView.isUserInteractionEnabled = false + subviews.forEach { $0.isHidden = true } viewsToSkeletone .flatMap { view in - view.isHidden = true - - return getSkeletonLayer(forView: view, baseView: baseView, withConfiguration: config) + getSkeletonLayer(forView: view, withConfiguration: config) } .map { layer in layer.startAnimation() return layer } - .insert(onto: baseView) + .insert(onto: self) } - public func hideSkeletons(baseView: UIView?) { - let baseView = baseView ?? self + public func hideSkeletons() { + isUserInteractionEnabled = true - baseView.isUserInteractionEnabled = true - - baseView.layer.sublayers?.forEach { layer in + layer.sublayers?.forEach { layer in if let layer = layer as? SkeletonLayer { - layer.remove(from: baseView) + layer.remove(from: self) } } - baseView.skeletonableViews.forEach { - $0.isHidden = false - } + subviews.forEach { $0.isHidden = false} } - public func startAnimation(baseView: UIView?) { - baseView?.layer.skeletonLayers.forEach { layer in + public func startAnimation() { + layer.skeletonLayers.forEach { layer in layer.startAnimation() } } - public func stopAnimation(baseView: UIView?) { - baseView?.layer.skeletonLayers.forEach { layer in + public func stopAnimation() { + layer.skeletonLayers.forEach { layer in layer.stopAnimation() } } @@ -80,10 +78,9 @@ extension UIView { // MARK: - Private methods private func getSkeletonLayer(forView view: UIView, - baseView: UIView, withConfiguration conf: SkeletonsConfiguration) -> [SkeletonLayer] { - let skeletonLayer = conf.createSkeletonLayer(for: baseView) + let skeletonLayer = conf.createSkeletonLayer(for: self) var subviewSkeletonLayers = [SkeletonLayer]() if view.isSkeletonsContainer { @@ -92,7 +89,7 @@ extension UIView { } subviewSkeletonLayers = view.skeletonableViews - .map { getSkeletonLayer(forView: $0, baseView: baseView, withConfiguration: conf) } + .map { getSkeletonLayer(forView: $0, withConfiguration: conf) } .flatMap { $0 } } else { diff --git a/TIUIElements/Sources/Views/Skeletons/UIViewController+PresentingSkeletons.swift b/TIUIElements/Sources/Views/Skeletons/UIViewController+PresentingSkeletons.swift index a4eb1ee0..3af38aa4 100644 --- a/TIUIElements/Sources/Views/Skeletons/UIViewController+PresentingSkeletons.swift +++ b/TIUIElements/Sources/Views/Skeletons/UIViewController+PresentingSkeletons.swift @@ -23,22 +23,27 @@ import UIKit extension UIViewController { - public func showSkeletons(on baseView: UIView?, - viewsToSkeletone: [UIView]? = nil, - _ config: SkeletonsConfiguration = .init()) { - (baseView ?? view).showSkeletons(on: nil, viewsToSkeletone: viewsToSkeletone, config) + /// Shows skeletons + /// + /// - Parameters: + /// - viewsToSkeletone: views that will be converted to skeletones. If nil was passed subviews of the view will be converted to skeletons + /// - config: configuration of the skeletons' layers + public func showSkeletons(viewsToSkeletone: [UIView]?, + _ config: SkeletonsConfiguration) { + + view.showSkeletons(viewsToSkeletone: viewsToSkeletone, config) } - public func hideSkeletons(baseView: UIView?) { - (baseView ?? view).hideSkeletons(baseView: nil) + public func hideSkeletons() { + view.hideSkeletons() } - public func startAnimation(baseView: UIView?) { - (baseView ?? view).startAnimation(baseView: nil) + public func startAnimation() { + view.startAnimation() } - public func stopAnimation(baseView: UIView?) { - (baseView ?? view).stopAnimation(baseView: nil) + public func stopAnimation() { + view.stopAnimation() } }