fix: code review notes
This commit is contained in:
parent
40aa2876d1
commit
23c2cbacea
|
|
@ -30,9 +30,9 @@ extension CGRect {
|
|||
height: height)
|
||||
}
|
||||
|
||||
func reduceSize(byPadding p: UIEdgeInsets) -> CGRect {
|
||||
let reducedWidth = width - p.left - p.right
|
||||
let reducedHeight = height - p.top - p.bottom
|
||||
func reduceSize(byPadding padding: UIEdgeInsets) -> CGRect {
|
||||
let reducedWidth = width - padding.left - padding.right
|
||||
let reducedHeight = height - padding.top - padding.bottom
|
||||
let reducedSize = CGSize(width: reducedWidth, height: reducedHeight)
|
||||
|
||||
return CGRect(origin: origin, size: reducedSize)
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ extension UILabel {
|
|||
extension UIView {
|
||||
public var skeletonableViews: [UIView] {
|
||||
if let skeletonableView = self as? Skeletonable {
|
||||
return skeletonableView.viewsToSkeletone
|
||||
return skeletonableView.viewsToSkeletones
|
||||
}
|
||||
|
||||
return subviews
|
||||
|
|
@ -58,7 +58,7 @@ extension UIView {
|
|||
|
||||
var isSkeletonsContainer: Bool {
|
||||
if let skeletonableView = self as? Skeletonable {
|
||||
return !skeletonableView.viewsToSkeletone.isEmpty
|
||||
return !skeletonableView.viewsToSkeletones.isEmpty
|
||||
}
|
||||
|
||||
return !subviews.isEmpty
|
||||
|
|
@ -67,19 +67,21 @@ extension UIView {
|
|||
var viewType: SkeletonLayer.ViewType {
|
||||
if let labelView = self as? UILabel {
|
||||
return .label(labelView)
|
||||
|
||||
} else if let textView = self as? UITextView {
|
||||
return .textView(textView)
|
||||
|
||||
} else if let imageView = self as? UIImageView {
|
||||
return .imageView(imageView)
|
||||
|
||||
} else if self.isSkeletonsContainer {
|
||||
return .parentView(self)
|
||||
|
||||
} else {
|
||||
return .leafView(self)
|
||||
}
|
||||
|
||||
if let textView = self as? UITextView {
|
||||
return .textView(textView)
|
||||
}
|
||||
|
||||
if let imageView = self as? UIImageView {
|
||||
return .imageView(imageView)
|
||||
}
|
||||
|
||||
if self.isSkeletonsContainer {
|
||||
return .parentView(self)
|
||||
}
|
||||
|
||||
return .leafView(self)
|
||||
}
|
||||
|
||||
fileprivate func isMultiline(text: String?,
|
||||
|
|
|
|||
|
|
@ -23,5 +23,5 @@
|
|||
import class UIKit.UIView
|
||||
|
||||
public protocol Skeletonable {
|
||||
var viewsToSkeletone: [UIView] { get }
|
||||
var viewsToSkeletones: [UIView] { get }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,5 +21,5 @@
|
|||
//
|
||||
|
||||
public protocol SkeletonsConfigurationDelegate: AnyObject {
|
||||
func layerDidConfigured(forViewType type: SkeletonLayer.ViewType, layer: SkeletonLayer)
|
||||
func layerDidConfigured(_ layer: SkeletonLayer, forViewType type: SkeletonLayer.ViewType)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ public protocol SkeletonsPresenter {
|
|||
var skeletonsHolder: UIView { get }
|
||||
var skeletonsConfiguration: SkeletonsConfiguration { get }
|
||||
var isSkeletonsHidden: Bool { get }
|
||||
var viewsToSkeletone: [UIView] { get }
|
||||
var viewsToSkeletones: [UIView] { get }
|
||||
|
||||
func showSkeletons()
|
||||
func hideSkeletons()
|
||||
|
|
@ -46,17 +46,17 @@ extension SkeletonsPresenter {
|
|||
isSkeletonsHidden(forView: skeletonsHolder)
|
||||
}
|
||||
|
||||
public var viewsToSkeletone: [UIView] {
|
||||
public var viewsToSkeletones: [UIView] {
|
||||
skeletonsHolder.skeletonableViews
|
||||
}
|
||||
|
||||
public func showSkeletons() {
|
||||
skeletonsHolder.showSkeletons(viewsToSkeletone: viewsToSkeletone,
|
||||
skeletonsHolder.showSkeletons(viewsToSkeletones: viewsToSkeletones,
|
||||
skeletonsConfiguration)
|
||||
}
|
||||
|
||||
func isSkeletonsHidden(forView view: UIView) -> Bool {
|
||||
(view.layer.sublayers ?? []).first { $0 is SkeletonLayer } == nil
|
||||
view.layer.skeletonLayers.isEmpty
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -115,7 +115,7 @@ open class SkeletonLayer: CAShapeLayer {
|
|||
}
|
||||
}
|
||||
|
||||
configuration.configurationDelegate?.layerDidConfigured(forViewType: viewType, layer: self)
|
||||
configuration.configurationDelegate?.layerDidConfigured(self, forViewType: viewType)
|
||||
}
|
||||
|
||||
open func remove(from view: UIView) {
|
||||
|
|
|
|||
|
|
@ -30,17 +30,17 @@ extension UIView {
|
|||
/// Shows skeletons on the view
|
||||
///
|
||||
/// - Parameters:
|
||||
/// - viewsToSkeletone: views that will be converted to skeletones. If nil was passed subviews will be converted to skeletons
|
||||
/// - viewsToSkeletones: 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]?,
|
||||
public func showSkeletons(viewsToSkeletones: [UIView]?,
|
||||
_ config: SkeletonsConfiguration) {
|
||||
|
||||
let viewsToSkeletone = viewsToSkeletone ?? skeletonableViews
|
||||
let viewsToSkeletones = viewsToSkeletones ?? skeletonableViews
|
||||
isUserInteractionEnabled = false
|
||||
|
||||
configureBaseLayer(withConfiguration: config)
|
||||
|
||||
viewsToSkeletone
|
||||
viewsToSkeletones
|
||||
.flatMap { view in
|
||||
getSkeletonLayer(forView: view, withConfiguration: config)
|
||||
}
|
||||
|
|
@ -55,23 +55,18 @@ extension UIView {
|
|||
public func hideSkeletons() {
|
||||
isUserInteractionEnabled = true
|
||||
|
||||
layer.sublayers?.forEach { layer in
|
||||
if let layer = layer as? SkeletonLayer {
|
||||
layer.remove(from: self)
|
||||
}
|
||||
}
|
||||
layer.skeletonLayers
|
||||
.forEach { $0.remove(from: self) }
|
||||
}
|
||||
|
||||
public func startAnimation() {
|
||||
layer.skeletonLayers.forEach { layer in
|
||||
layer.startAnimation()
|
||||
}
|
||||
layer.skeletonLayers
|
||||
.forEach { $0.startAnimation() }
|
||||
}
|
||||
|
||||
public func stopAnimation() {
|
||||
layer.skeletonLayers.forEach { layer in
|
||||
layer.stopAnimation()
|
||||
}
|
||||
layer.skeletonLayers
|
||||
.forEach { $0.stopAnimation() }
|
||||
}
|
||||
|
||||
// MARK: - Private methods
|
||||
|
|
|
|||
|
|
@ -27,12 +27,12 @@ extension UIViewController {
|
|||
/// Shows skeletons
|
||||
///
|
||||
/// - Parameters:
|
||||
/// - viewsToSkeletone: views that will be converted to skeletones. If nil was passed subviews of the view will be converted to skeletons
|
||||
/// - viewsToSkeletones: 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]?,
|
||||
public func showSkeletons(viewsToSkeletones: [UIView]?,
|
||||
_ config: SkeletonsConfiguration) {
|
||||
|
||||
view.showSkeletons(viewsToSkeletone: viewsToSkeletone, config)
|
||||
view.showSkeletons(viewsToSkeletones: viewsToSkeletones, config)
|
||||
}
|
||||
|
||||
public func hideSkeletons() {
|
||||
|
|
|
|||
|
|
@ -15,9 +15,9 @@
|
|||
## Как начать пользоваться
|
||||
|
||||
Базовая настройка для показа скелетонов не требуется. `UIView` и `UIViewController` уже имеют все необходимые методы для работы:
|
||||
- `showSkeletons(viewsToSkeletone:_:)` : используется для показа скелетонов, если была передана конфигурация анимации, то она запустится автоматически. `viewsToSkeletone` - опциональный массив `UIView`, определяющий, какие вью будут конвертироваться в скелетоны. Если nil, то проход будет осуществляться по списку subview
|
||||
- `showSkeletons(viewsToSkeletones:_:)` : используется для показа скелетонов, если была передана конфигурация анимации, то она запустится автоматически. `viewsToSkeletones` - опциональный массив `UIView`, определяющий, какие вью будут конвертироваться в скелетоны. Если nil, то проход будет осуществляться по списку subview
|
||||
- `hideSkeletons()` : используется для скрытия скелетонов
|
||||
- `startAnimation()` : используется для старта анимации на скелетонах (если анимания не была сконфигурирована в методе `showSkeletons(viewsToSkeletone:_:)` то ничего не произойдет)
|
||||
- `startAnimation()` : используется для старта анимации на скелетонах (если анимания не была сконфигурирована в методе `showSkeletons(viewsToSkeletones:_:)` то ничего не произойдет)
|
||||
- `stopAnimation()` : используется для остановки анимации на скелетонах
|
||||
*/
|
||||
import TIUIKitCore
|
||||
|
|
@ -86,8 +86,8 @@ class CanShowAndHideSkeletons: BaseInitializableViewController {
|
|||
}
|
||||
|
||||
@objc private func toggleSkeletons() {
|
||||
// Т.к. передается nil, скелетонится будут все subview (в данном случае view.subview == [button, label, imageView])
|
||||
showSkeletons(viewsToSkeletone: nil, .init())
|
||||
// Т.к. передается nil, скелетониться будут все subview (в данном случае view.subview == [button, label, imageView])
|
||||
showSkeletons(viewsToSkeletones: nil, .init())
|
||||
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(3)) { [weak self] in
|
||||
self?.hideSkeletons()
|
||||
|
|
@ -101,7 +101,7 @@ class CanShowAndHideSkeletons: BaseInitializableViewController {
|
|||
Если необходимо изменить список конвертируемых в скелетоны view у какой-нибудь из отдельных view в иерархии, можно подписать его под протокол `Skeletonable`
|
||||
*/
|
||||
extension UITableViewCell: Skeletonable {
|
||||
public var viewsToSkeletone: [UIView] {
|
||||
public var viewsToSkeletones: [UIView] {
|
||||
contentView.subviews
|
||||
}
|
||||
}
|
||||
|
|
@ -251,12 +251,12 @@ var confWithPadding: SkeletonsConfiguration {
|
|||
|
||||
```swift
|
||||
public protocol SkeletonsConfigurationDelegate: AnyObject {
|
||||
func layerDidConfigured(forViewType type: SkeletonLayer.ViewType, layer: SkeletonLayer)
|
||||
func layerDidConfigured(_ layer: SkeletonLayer, forViewType type: SkeletonLayer.ViewType)
|
||||
}
|
||||
```
|
||||
*/
|
||||
class SkeletonsConfDelegate: SkeletonsConfigurationDelegate {
|
||||
func layerDidConfigured(forViewType type: SkeletonLayer.ViewType, layer: SkeletonLayer) {
|
||||
func layerDidConfigured(_ layer: SkeletonLayer, forViewType type: SkeletonLayer.ViewType) {
|
||||
if case .imageView(_) = type {
|
||||
layer.frame = .init(x: layer.frame.minX - 20,
|
||||
y: layer.frame.minY - 20,
|
||||
|
|
@ -312,4 +312,4 @@ confWithLeftToRightAnim.labelConfiguration = .init(numberOfLines: 2)
|
|||
|
||||
PlaygroundPage.current.liveView = canShowAndHideController
|
||||
|
||||
canShowAndHideController.showSkeletons(viewsToSkeletone: nil, confWithLeftToRightAnim)
|
||||
canShowAndHideController.showSkeletons(viewsToSkeletones: nil, confWithLeftToRightAnim)
|
||||
|
|
|
|||
|
|
@ -15,9 +15,9 @@
|
|||
## Как начать пользоваться
|
||||
|
||||
Базовая настройка для показа скелетонов не требуется. `UIView` и `UIViewController` уже имеют все необходимые методы для работы:
|
||||
- `showSkeletons(viewsToSkeletone:_:)` : используется для показа скелетонов, если была передана конфигурация анимации, то она запустится автоматически. `viewsToSkeletone` - опциональный массив `UIView`, определяющий, какие вью будут конвертироваться в скелетоны. Если nil, то проход будет осуществляться по списку subview
|
||||
- `showSkeletons(viewsToSkeletones:_:)` : используется для показа скелетонов, если была передана конфигурация анимации, то она запустится автоматически. `viewsToSkeletones` - опциональный массив `UIView`, определяющий, какие вью будут конвертироваться в скелетоны. Если nil, то проход будет осуществляться по списку subview
|
||||
- `hideSkeletons()` : используется для скрытия скелетонов
|
||||
- `startAnimation()` : используется для старта анимации на скелетонах (если анимания не была сконфигурирована в методе `showSkeletons(viewsToSkeletone:_:)` то ничего не произойдет)
|
||||
- `startAnimation()` : используется для старта анимации на скелетонах (если анимания не была сконфигурирована в методе `showSkeletons(viewsToSkeletones:_:)` то ничего не произойдет)
|
||||
- `stopAnimation()` : используется для остановки анимации на скелетонах
|
||||
|
||||
```swift
|
||||
|
|
@ -87,8 +87,8 @@ class CanShowAndHideSkeletons: BaseInitializableViewController {
|
|||
}
|
||||
|
||||
@objc private func toggleSkeletons() {
|
||||
// Т.к. передается nil, скелетонится будут все subview (в данном случае view.subview == [button, label, imageView])
|
||||
showSkeletons(viewsToSkeletone: nil, .init())
|
||||
// Т.к. передается nil, скелетониться будут все subview (в данном случае view.subview == [button, label, imageView])
|
||||
showSkeletons(viewsToSkeletones: nil, .init())
|
||||
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(3)) { [weak self] in
|
||||
self?.hideSkeletons()
|
||||
|
|
@ -103,7 +103,7 @@ class CanShowAndHideSkeletons: BaseInitializableViewController {
|
|||
|
||||
```swift
|
||||
extension UITableViewCell: Skeletonable {
|
||||
public var viewsToSkeletone: [UIView] {
|
||||
public var viewsToSkeletones: [UIView] {
|
||||
contentView.subviews
|
||||
}
|
||||
}
|
||||
|
|
@ -270,13 +270,13 @@ var confWithPadding: SkeletonsConfiguration {
|
|||
|
||||
```swift
|
||||
public protocol SkeletonsConfigurationDelegate: AnyObject {
|
||||
func layerDidConfigured(forViewType type: SkeletonLayer.ViewType, layer: SkeletonLayer)
|
||||
func layerDidConfigured(_ layer: SkeletonLayer, forViewType type: SkeletonLayer.ViewType)
|
||||
}
|
||||
```
|
||||
|
||||
```swift
|
||||
class SkeletonsConfDelegate: SkeletonsConfigurationDelegate {
|
||||
func layerDidConfigured(forViewType type: SkeletonLayer.ViewType, layer: SkeletonLayer) {
|
||||
func layerDidConfigured(_ layer: SkeletonLayer, forViewType type: SkeletonLayer.ViewType) {
|
||||
if case .imageView(_) = type {
|
||||
layer.frame = .init(x: layer.frame.minX - 20,
|
||||
y: layer.frame.minY - 20,
|
||||
|
|
@ -336,5 +336,5 @@ confWithLeftToRightAnim.labelConfiguration = .init(numberOfLines: 2)
|
|||
|
||||
PlaygroundPage.current.liveView = canShowAndHideController
|
||||
|
||||
canShowAndHideController.showSkeletons(viewsToSkeletone: nil, confWithLeftToRightAnim)
|
||||
canShowAndHideController.showSkeletons(viewsToSkeletones: nil, confWithLeftToRightAnim)
|
||||
```
|
||||
|
|
|
|||
Loading…
Reference in New Issue