fix: remove useless baseView

This commit is contained in:
Nikita Semenov 2023-03-07 13:00:34 +03:00
parent 7a0747843a
commit b533eaaae6
3 changed files with 48 additions and 63 deletions

View File

@ -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)
}
}

View File

@ -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 {

View File

@ -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()
}
}