반응형
1. UIImageView에 extension으로 메서드 추가하는 방법
url로 이미지 불러오는 일이 이렇게 복잡한 지 처음 알았다...
그냥 대충 setImage에 url 인자 넣으면 되는 줄 알았더니 생각보다 아주 까다롭구만..
다음과 같이 UIImageView에 extension으로 url로 이미지 로드하는 메서드를 만들어준다.
이미지를 다운로드받아 불러올 때, 이미지가 클 경우 시간이 오래 걸릴 수 있기에 끊김이 없도록 DispatchQueue를 사용해 멀티쓰레드로 처리를 해준다.
extension UIImageView {
func load(url: URL) {
DispatchQueue.global().async { [weak self] in
if let data = try? Data(contentsOf: url) {
if let image = UIImage(data: data) {
DispatchQueue.main.async {
self?.image = image
}
}
}
}
}
}
뷰컨트롤러 안에서 직접 받아와도 되지만,
이렇게 extension으로 만들어주면 원할 때 어디서든 load 메서드를 이용하여 이미지를 간편하게 받아올 수 있다.
다음과 같이 편하게 사용가능함.
var image: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
let url = URL(string: "url")
image.load(url: url!)
}
참고 :
https://www.youtube.com/watch?v=j-IvjFtECD0
2022-08-31
2. KingFisher 라이브러리 사용하는 방법
KingFisher라는 오픈소스 라이브러리를 사용하여 이미지를 간편하게 관리할 수도 있다.
if let imageURL = URL(string: imageURL) {
imageView.kf.setImage(with: url)
}
2023-03
3. async / await + URLSession 사용하는 방법
func fetchImage(url: URL) async throws -> UIImage {
let request = URLRequest(url: url)
let (data, response) = try await URLSession.shared.data(for: request)
guard let statusCode = (response as? HTTPURLResponse)?.statusCode,
(200...299).contains(statusCode) else { throw NSError(domain: "fetch error", code: 1004) }
guard let image = UIImage(data: data) else { NSError(domain: "image coverting error", code: 999) }
return image
}
위 처럼 이미지를 받아와서 아래과 같이 사용할 수 있다.
let image = try await fetchImage(url: url)
728x90
반응형
'Swift iOS 앱 개발 > Swift' 카테고리의 다른 글
[Swift iOS] Dependency Manager : CocoaPods / Carthage / Swift Package Manager (0) | 2021.07.09 |
---|---|
[Swift iOS] UILabel text line spacing 자간 설정하기 (1) | 2021.06.29 |
[Swift iOS] swift codable null handling (0) | 2021.06.24 |
[Swift iOS] 검색기능구현 - 문자열 탐색 NSString.CompareOptions (0) | 2021.06.22 |
[Swift iOS] LaunchScreen duration 이미지 및 노출 시간 설정 (0) | 2021.06.17 |