Skip to content

Commit 0799e49

Browse files
authored
Merge pull request #136 from PopPool/fix/#132-fix-imageBlink
[FIX] ์ด๋ฏธ์ง€ ๋ธ”๋งํฌ ๋ฌธ์ œ ๊ฐœ์„ 
2 parents abbd6d2 + 5ba98dd commit 0799e49

File tree

1 file changed

+73
-20
lines changed

1 file changed

+73
-20
lines changed

โ€ŽPoppool/CoreLayer/Infrastructure/Infrastructure/Extension/UIImageView+.swiftโ€Ž

Lines changed: 73 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,87 @@
1+
import ObjectiveC
12
import UIKit
23

4+
private var currentURLKey: UInt8 = 0
5+
private var placeholderImageKey: UInt8 = 0
6+
37
public extension UIImageView {
8+
9+
private var currentImageURL: String? {
10+
get { objc_getAssociatedObject(self, &currentURLKey) as? String }
11+
set { objc_setAssociatedObject(self, &currentURLKey, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) }
12+
}
13+
14+
private var placeholderImage: UIImage? {
15+
get { objc_getAssociatedObject(self, &placeholderImageKey) as? UIImage }
16+
set { objc_setAssociatedObject(self, &placeholderImageKey, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) }
17+
}
18+
419
func setPPImage(path: String?) {
5-
guard let path = path else {
6-
self.image = UIImage(named: "image_default")
20+
loadImageFromImageLoader(path: path, completion: nil)
21+
}
22+
23+
func setPPImage(path: String?, completion: @escaping () -> Void) {
24+
loadImageFromImageLoader(path: path, completion: completion)
25+
}
26+
27+
func loadImageFromImageLoader(path: String?, completion: (() -> Void)? = nil) {
28+
// ๊ธฐ๋ณธ ์ด๋ฏธ์ง€ ์ €์žฅ
29+
if placeholderImage == nil {
30+
placeholderImage = UIImage(named: "image_default")
31+
completion?()
32+
}
33+
34+
guard let path = path, !path.isEmpty else {
35+
image = placeholderImage
36+
currentImageURL = nil
37+
completion?()
738
return
839
}
40+
941
let imageURLString = Secrets.popPoolS3BaseURL + path
10-
if let cenvertimageURL = imageURLString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) {
11-
ImageLoader.shared.loadImage(with: cenvertimageURL, defaultImage: UIImage(named: "image_default"), imageQuality: .origin) { [weak self] image in
12-
DispatchQueue.main.async {
13-
self?.image = image
14-
}
15-
}
42+
guard let encodedURL = imageURLString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {
43+
image = placeholderImage
44+
currentImageURL = nil
45+
completion?()
46+
return
1647
}
17-
}
1848

19-
func setPPImage(path: String?, completion: @escaping () -> Void) {
20-
guard let path = path else {
21-
self.image = UIImage(named: "image_default")
22-
completion()
49+
// ์ด๋ฏธ ๊ฐ™์€ URL์„ ๋กœ๋”ฉํ–ˆ๊ณ  ์ด๋ฏธ์ง€๊ฐ€ ์žˆ์œผ๋ฉด ์žฌ๋กœ๋”ฉ ๋ฐฉ์ง€
50+
if currentImageURL == encodedURL && self.image != nil && self.image != placeholderImage {
51+
completion?()
2352
return
2453
}
25-
let imageURLString = Secrets.popPoolS3BaseURL + path
26-
if let cenvertimageURL = imageURLString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) {
27-
let imageURL = URL(string: cenvertimageURL)
28-
ImageLoader.shared.loadImage(with: cenvertimageURL, defaultImage: UIImage(named: "image_default"), imageQuality: .origin) { [weak self] image in
29-
DispatchQueue.main.async {
30-
completion()
31-
self?.image = image
54+
55+
// ํ˜„์žฌ ์ด๋ฏธ์ง€ URL์„ ์—…๋ฐ์ดํŠธ
56+
currentImageURL = encodedURL
57+
58+
// ๋จผ์ € ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ ํ™•์ธ
59+
if let cachedImage = MemoryStorage.shared.fetchImage(url: encodedURL) {
60+
self.image = cachedImage
61+
completion?()
62+
return
63+
}
64+
65+
// ๋‹ค์Œ์œผ๋กœ ๋””์Šคํฌ ์บ์‹œ ํ™•์ธ
66+
if let diskImage = DiskStorage.shared.fetchImage(url: encodedURL) {
67+
MemoryStorage.shared.store(image: diskImage, url: encodedURL)
68+
self.image = diskImage
69+
completion?()
70+
return
71+
}
72+
73+
ImageLoader.shared.loadImage(with: encodedURL, defaultImage: placeholderImage, imageQuality: .origin) { [weak self] image in
74+
guard let self else { return }
75+
defer { completion?() }
76+
DispatchQueue.main.async {
77+
// ํ˜„์žฌ ์š”์ฒญ ID์™€ ์บก์ฒ˜๋œ ID๊ฐ€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธ (๋‹ค๋ฅธ ์ด๋ฏธ์ง€๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ์œผ๋ฉด ๋ฌด์‹œ)
78+
if self.currentImageURL == encodedURL {
79+
if let image = image {
80+
self.image = image
81+
} else if self.image == nil {
82+
// ์ด๋ฏธ์ง€ ๋กœ๋“œ ์‹คํŒจ ์‹œ ๊ธฐ๋ณธ ์ด๋ฏธ์ง€ ํ‘œ์‹œ
83+
self.image = self.placeholderImage
84+
}
3285
}
3386
}
3487
}

0 commit comments

Comments
ย (0)