Skip to content

Commit 035a5e2

Browse files
committed
- The optimized image loading process;
- clearCache now global method; - added changelog;
1 parent 995c50c commit 035a5e2

File tree

7 files changed

+53
-21
lines changed

7 files changed

+53
-21
lines changed

Documentation/Changelog.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
## CHANGELOG
2+
3+
### v0.3.0
4+
- The optimized image loading process;
5+
- `clearCache` now global method, use: `RESegmentedControl.clearCache()`;
6+
7+
### v0.2.1
8+
- fixed Auto-Layout warnings;
9+
10+
### v0.2.0
11+
12+
First public release

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,10 @@ Please make sure to update tests as appropriate.
189189

190190
Sherzod Khashimov
191191

192+
## Changelog
193+
194+
See [**changelog here**](/Documentation/Changelog.md)
195+
192196
## License
193197

194198
RESegmentedControl is available under the MIT license. See the LICENSE file for more info.

RESegmentedControl.podspec

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
Pod::Spec.new do |s|
1010
s.name = 'RESegmentedControl'
11-
s.version = '0.2.1'
11+
s.version = '0.3.0'
1212
s.summary = 'A Customizable Segmented Control.'
1313

1414
# This description is used to generate tags and improve search results.
@@ -22,7 +22,8 @@ Pod::Spec.new do |s|
2222
DESC
2323

2424
s.homepage = 'https://github.com/sh-khashimov/RESegmentedControl'
25-
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
25+
s.documentation_url = 'https://sh-khashimov.github.io/RESegmentedControl'
26+
s.screenshots = 'https://raw.githubusercontent.com/sh-khashimov/RESegmentedControl/master/Images/1.png', 'https://raw.githubusercontent.com/sh-khashimov/RESegmentedControl/master/Images/2.png', 'https://raw.githubusercontent.com/sh-khashimov/RESegmentedControl/master/Images/3.png'
2627
s.license = { :type => 'MIT', :file => 'LICENSE' }
2728
s.author = { 'Sherzod Khashimov' => 'sh.khashimov@gmail.com' }
2829
s.source = { :git => 'https://github.com/sh-khashimov/RESegmentedControl.git', :tag => s.version.to_s }

Sources/RESegmentedControl/Classes/Cells/SegmentCollectionViewCell.swift

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -23,25 +23,30 @@ internal class SegmentCollectionViewCell: UICollectionViewCell {
2323
textLabel.text = item?.title ?? ""
2424
textLabel.isHidden = item?.title == nil
2525

26-
if let imageUrl = item?.imageUrl {
27-
imageDownload.downloadImage(url: imageUrl) { [weak self] (image, url, error) in
28-
guard let image = image else { return }
29-
guard imageUrl == url else { return }
30-
self?.imageView.image = image.withRenderingMode(self?.style?.imageRenderMode ?? .automatic)
31-
}
32-
} else {
33-
if let imageName = item?.imageName {
34-
let bundle = item?.bundle ?? Bundle.main
35-
if let image = UIImage(named: imageName, in: bundle, compatibleWith: nil) {
36-
imageView.image = image.withRenderingMode(style?.imageRenderMode ?? .automatic)
37-
}
38-
}
39-
}
40-
4126
imageView.isHidden = !(item?.isImageAvailable ?? false)
4227
}
4328
}
4429

30+
func loadImageIfNeeded() {
31+
if let imageUrl = item?.imageUrl {
32+
imageDownload.downloadImage(url: imageUrl) { [weak self] (image, url, error) in
33+
guard let image = image else { return }
34+
guard imageUrl == url else { return }
35+
self?.imageView.image = image.withRenderingMode(self?.style?.imageRenderMode ?? .automatic)
36+
}
37+
} else if let imageName = item?.imageName {
38+
let bundle = item?.bundle ?? Bundle.main
39+
if let image = UIImage(named: imageName, in: bundle, compatibleWith: nil) {
40+
imageView.image = image.withRenderingMode(style?.imageRenderMode ?? .automatic)
41+
}
42+
}
43+
}
44+
45+
func cancelImageDownloadIfNeeded() {
46+
guard item?.imageUrl != nil else { return }
47+
imageDownload.cancel()
48+
}
49+
4550
private var style: SegmentItemStylable? {
4651
didSet {
4752
configUI()
@@ -54,14 +59,12 @@ internal class SegmentCollectionViewCell: UICollectionViewCell {
5459
self.backgroundColor = .clear
5560
item = nil
5661
imageView.image = nil
57-
imageDownload.cancel()
5862
}
5963

6064
override func prepareForReuse() {
6165
super.prepareForReuse()
6266
imageView.image = nil
6367
item = nil
64-
imageDownload.cancel()
6568
}
6669

6770
override var isSelected: Bool {

Sources/RESegmentedControl/Classes/Models/SegmentModel.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public struct SegmentModel {
5858
return true
5959
}
6060

61-
if let imageName = imageName, imageName != "" {
61+
if imageName != "" {
6262
return true
6363
}
6464

Sources/RESegmentedControl/Classes/RESegmentedControl.swift

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,18 @@ extension RESegmentedControl: UICollectionViewDataSource {
337337

338338
return cell ?? UICollectionViewCell()
339339
}
340+
341+
public func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
342+
guard collectionView == self.collectionView else { return }
343+
guard let _cell = cell as? SegmentCollectionViewCell else { return }
344+
_cell.loadImageIfNeeded()
345+
}
346+
347+
public func collectionView(_ collectionView: UICollectionView, didEndDisplaying cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
348+
guard collectionView == self.collectionView else { return }
349+
guard let _cell = cell as? SegmentCollectionViewCell else { return }
350+
_cell.cancelImageDownloadIfNeeded()
351+
}
340352
}
341353

342354
// - MARK: UICollectionViewDelegate

Sources/RESegmentedControl/Classes/SegmentedControl+API.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ extension RESegmentedControl {
5050
}
5151

5252
/// Clears images cache, that was downloaded from a remote server
53-
public func clearCache() {
53+
public static func clearCache() {
5454
let fileManager = FileManager()
5555
fileManager.removeImagesDirectory()
5656
}

0 commit comments

Comments
 (0)