fix: code review notes

This commit is contained in:
Nikita Semenov 2023-03-11 22:07:06 +03:00
parent 40aa2876d1
commit 23c2cbacea
10 changed files with 55 additions and 58 deletions

View File

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

View File

@ -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?,

View File

@ -23,5 +23,5 @@
import class UIKit.UIView
public protocol Skeletonable {
var viewsToSkeletone: [UIView] { get }
var viewsToSkeletones: [UIView] { get }
}

View File

@ -21,5 +21,5 @@
//
public protocol SkeletonsConfigurationDelegate: AnyObject {
func layerDidConfigured(forViewType type: SkeletonLayer.ViewType, layer: SkeletonLayer)
func layerDidConfigured(_ layer: SkeletonLayer, forViewType type: SkeletonLayer.ViewType)
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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