Skip to content

Commit f77145e

Browse files
committed
Added activity indicator to table cell. Updated rounded method.
1 parent a2d3eb1 commit f77145e

File tree

3 files changed

+64
-27
lines changed

3 files changed

+64
-27
lines changed

Sources/SparrowKit/UIKit/Classes/Table/SPTableViewCell.swift

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,10 @@ open class SPTableViewCell: UITableViewCell {
5959
}
6060
}
6161

62+
// MARK: - Views
63+
64+
internal var activityIndicatorView: UIActivityIndicatorView?
65+
6266
// MARK: - Init
6367

6468
public override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
@@ -84,6 +88,7 @@ open class SPTableViewCell: UITableViewCell {
8488
open override func prepareForReuse() {
8589
super.prepareForReuse()
8690
currentIndexPath = nil
91+
setLoading(false)
8792
}
8893

8994
open override func tintColorDidChange() {
@@ -100,8 +105,6 @@ open class SPTableViewCell: UITableViewCell {
100105
}
101106
}
102107

103-
// MARK: - Override
104-
105108
open override func setHighlighted(_ highlighted: Bool, animated: Bool) {
106109
super.setHighlighted(highlighted, animated: animated)
107110
let higlightContent = (higlightStyle == .content)
@@ -110,6 +113,44 @@ open class SPTableViewCell: UITableViewCell {
110113
}
111114
}
112115

116+
open override func layoutSubviews() {
117+
super.layoutSubviews()
118+
activityIndicatorView?.setToCenter()
119+
}
120+
121+
// MARK: - Public
122+
123+
open func setLoading(_ state: Bool) {
124+
125+
// Validate
126+
127+
if state {
128+
if activityIndicatorView?.isAnimating ?? false { return }
129+
} else {
130+
if activityIndicatorView == nil { return }
131+
}
132+
133+
// Process
134+
135+
let contentViews = contentView.subviews
136+
137+
if state {
138+
if activityIndicatorView == nil {
139+
let activityIndicatorView = UIActivityIndicatorView()
140+
contentView.addSubviews(activityIndicatorView)
141+
self.activityIndicatorView = activityIndicatorView
142+
}
143+
contentViews.forEach({ $0.isHidden = true })
144+
activityIndicatorView?.startAnimating()
145+
layoutSubviews()
146+
} else {
147+
contentViews.forEach({ $0.isHidden = false })
148+
activityIndicatorView?.stopAnimating()
149+
activityIndicatorView?.removeFromSuperview()
150+
activityIndicatorView = nil
151+
}
152+
}
153+
113154
// MARK: - Models
114155

115156
/**

Sources/SparrowKit/UIKit/Extensions/UIViewExtension.swift

Lines changed: 21 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,13 @@ extension UIView {
7878
subviews.forEach { $0.removeFromSuperview() }
7979
}
8080

81+
/**
82+
SparrowKit: State if current view has superview.
83+
*/
84+
open var hasSuperview: Bool {
85+
superview != nil
86+
}
87+
8188
/**
8289
SparrowKit: Take screenshoot of view as `UIImage`.
8390
*/
@@ -302,38 +309,26 @@ extension UIView {
302309
}
303310

304311
/**
305-
SparrowKit: Correct rounded corners by current frame.
312+
SparrowKit: Round corners .
306313

307-
- important:
308-
Need call after changed frame. Better leave it in `layoutSubviews` method.
309-
310-
- parameter corners: Case of `UIRectCorner`
314+
- parameter corners: Case of `CACornerMask`. Which corners need to round.
315+
- parameter curve: Case of `CornerCurve`. Style of rounded corners.
311316
- parameter radius: Amount of radius.
312317
*/
313-
open func roundCorners(_ corners: UIRectCorner = .allCorners, radius: CGFloat) {
314-
let maskPath = UIBezierPath(
315-
roundedRect: bounds,
316-
byRoundingCorners: corners,
317-
cornerRadii: CGSize(width: radius, height: radius)
318-
)
319-
let shape = CAShapeLayer()
320-
shape.path = maskPath.cgPath
321-
layer.mask = shape
318+
open func roundCorners(_ corners: CACornerMask = [.layerMaxXMaxYCorner, .layerMaxXMinYCorner, .layerMinXMaxYCorner, .layerMinXMinYCorner], curve: CornerCurve = .continuous, radius: CGFloat) {
319+
layer.cornerRadius = radius
320+
layer.maskedCorners = corners
321+
322+
if #available(iOS 13.0, tvOS 13.0, *) {
323+
layer.cornerCurve = curve.layerCornerCurve
324+
}
322325
}
323326

324327
/**
325-
SparrowKit: Rounded corners to maximum of corner radius.
326-
327-
- important:
328-
Need call after changed frame. Better leave it in `layoutSubviews` method.
329-
330-
- parameter curve: Style of round curve.
328+
SparrowKit: Round side by minimum `height` or `width`.
331329
*/
332-
open func roundCorners(_ curve: CornerCurve = .continuous) {
333-
if #available(iOS 13.0, tvOS 13.0, *) {
334-
layer.cornerCurve = curve.layerCornerCurve
335-
}
336-
layer.cornerRadius = min(frame.width, frame.height) / 2
330+
open func roundMinimumSide() {
331+
roundCorners(radius: min(frame.width / 2, frame.height / 2))
337332
}
338333

339334
/**
@@ -435,6 +430,7 @@ extension UIView {
435430
}, completion: completion)
436431
}
437432

433+
// MARK: - Models
438434

439435
public enum CornerCurve {
440436

0 commit comments

Comments
 (0)